推荐答案
在 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 支持依赖注入,控制器可以通过构造函数注入服务层或其他依赖项。例如:
-- -------------------- ---- ------- -------------------- ------ ----- --------------- - ------------------- -------- ------------- ------------- -- ------ ---------- ------ - ------ ---------------------------- - -
在这个例子中,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 应用程序中处理请求和响应的核心部分。通过使用装饰器,开发者可以轻松定义路由、访问请求和响应对象、注入依赖项以及处理路由参数和查询参数。