推荐答案
在 Nest.js 中,控制器 (Controller) 是处理传入请求并返回响应的核心组件。它负责接收客户端请求,调用相应的服务层逻辑,并将结果返回给客户端。控制器通常与路由相关联,定义了应用程序的 API 端点。
本题详细解读
控制器的定义
在 Nest.js 中,控制器是通过装饰器 @Controller() 来定义的。这个装饰器可以接受一个路径参数,用于指定该控制器处理的根路由。例如:
@Controller('users')
export class UsersController {
// 控制器方法
}在这个例子中,UsersController 将处理所有以 /users 开头的请求。
控制器方法
控制器中的方法通常使用 HTTP 方法装饰器来定义,例如 @Get()、@Post()、@Put()、@Delete() 等。这些装饰器指定了该方法处理的 HTTP 请求类型和路径。例如:
@Get()
findAll(): string {
return 'This action returns all users';
}这个方法将处理对 /users 的 GET 请求,并返回一个字符串。
请求和响应对象
控制器方法可以访问请求和响应对象。Nest.js 提供了 @Req() 和 @Res() 装饰器来注入这些对象。例如:
@Get(':id')
findOne(@Req() request: Request, @Res() response: Response): void {
const userId = request.params.id;
response.status(200).send(`This action returns user #${userId}`);
}依赖注入
Nest.js 支持依赖注入,控制器可以通过构造函数注入服务层或其他依赖项。例如:
// www.javascriptcn.com code example
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
findAll(): string {
return this.usersService.findAll();
}
}在这个例子中,UsersService 被注入到 UsersController 中,并在 findAll 方法中被调用。
路由参数和查询参数
控制器方法可以通过装饰器 @Param() 和 @Query() 来访问路由参数和查询参数。例如:
@Get(':id')
findOne(@Param('id') id: string, @Query('name') name: string): string {
return `This action returns user #${id} with name ${name}`;
}总结
控制器是 Nest.js 应用程序中处理请求和响应的核心部分。通过使用装饰器,开发者可以轻松定义路由、访问请求和响应对象、注入依赖项以及处理路由参数和查询参数。