Note
控制器
nestjs的控制器介绍
发布于 更新于
controller
控制器,控制器的职责是接收请求、委托给服务层处理业务逻辑,并返回结果,细化为:处理请求(参数)、调用service处理业务、返回响应结果。通过路由机制决定了哪个控制器将处理每个请求。通常,一个控制器具有多个路由,每个路由可以执行不同的操作,一个路由可以看做是一个接口。
@Controller
控制器的装饰器,为修饰对象添加元数据,让NestJS知道它是控制器。如:
定义控制器(生成路由)
import { Controller, Get } from '@nestjs/common';
/**
* @Controller装饰器告诉NestJS,UserController 是个控制器类,控制器公共路径是 /users
*/
@Controller('users')
export class UserController {
// @Get装饰器告诉NestJs,findAll 是一个路由处理方法,请求方式是 GET,路由是/userList
@Get('userList')
findAll(): string {
return 'This action returns all user';
}
// 上述最终组合出来的接口就是:GET /users/userList
}
装饰器会给类添加类似下面的信息:
UserController:
类型:Controller
路径:users
findOne:
请求方式:GET
路径:/userList
获取请求参数
import { Controller, Get, Param } from '@nestjs/common';
@Controller('users')
export class UserController {
// 请求方式是 GET,路由是/:id。"id"是一个“路径参数占位符”,可以匹配 /users/ 后面的一整段字符。如 /users/123、/user/sdfjl
@Get(':id')
/**
* @Param() 装饰器用于修饰方法参数,以此获取到参数的属性
*/
findOne(@Param() params: any): string {
console.log(params.id);
return `This action returns a #${params.id} cat`;
}
// 上述接口为:users/:id
}
也可以向装饰器传递特定的参数标记,直接在方法体中按名称引用路由参数
import { Controller, Get, Param, Query } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get(':id')
findOne(@Param('id') id: string): string {
return `This action returns a #${id} cat`;
}
@Get()
async findAll(@Query('age') age: number, @Query('breed') breed: string): string {
return `This action returns all cats filtered by age: ${age} and breed: ${breed}`;
}
}
请求负载
定义 DTO
create-cat.dto.ts
export class CreateCatDto {
name: string;
age: number;
breed: string;
}
使用 DTO
cats.controller.ts
@Post()
async create(@Body() createCatDto: CreateCatDto) {
return 'This action adds a new cat';
}