推荐答案
在 Nest.js 中,控制器是处理传入请求并返回响应的核心部分。控制器通过装饰器来定义路由和处理程序。以下是如何在 Nest.js 中定义一个控制器的基本步骤:
创建控制器类:使用
@Controller()
装饰器来定义一个控制器类。装饰器中的参数是路由的前缀。-- -------------------- ---- ------- ------ - ----------- --- - ---- ----------------- ------------------- ------ ----- -------------- - ------ ---------- ------ - ------ ----- ------ ------- --- ------ - -
定义路由处理程序:在控制器类中,使用
@Get()
、@Post()
、@Put()
、@Delete()
等装饰器来定义处理特定 HTTP 请求的方法。@Get(':id') findOne(@Param('id') id: string): string { return `This action returns a #${id} cat`; }
依赖注入:控制器可以通过构造函数注入服务或其他依赖项。
constructor(private readonly catsService: CatsService) {}
注册控制器:在模块中注册控制器,使其生效。
import { Module } from '@nestjs/common'; import { CatsController } from './cats.controller'; @Module({ controllers: [CatsController], }) export class CatsModule {}
本题详细解读
控制器的基本概念
在 Nest.js 中,控制器负责处理传入的 HTTP 请求并返回响应。控制器通常与路由相关联,路由决定了请求的 URL 路径与控制器方法的映射关系。
控制器装饰器
@Controller(prefix: string)
:用于定义一个控制器类,并指定路由的前缀。例如,@Controller('cats')
表示该控制器处理所有以/cats
开头的请求。
路由处理程序装饰器
@Get(route: string)
:用于处理 GET 请求。@Post(route: string)
:用于处理 POST 请求。@Put(route: string)
:用于处理 PUT 请求。@Delete(route: string)
:用于处理 DELETE 请求。
这些装饰器可以接受一个可选的路径参数,用于进一步定义路由。例如,@Get(':id')
表示处理 /cats/:id
的 GET 请求。
参数装饰器
@Param(key?: string)
:用于获取路由参数。@Query(key?: string)
:用于获取查询参数。@Body()
:用于获取请求体。@Headers(name?: string)
:用于获取请求头。
依赖注入
Nest.js 使用依赖注入(DI)来管理控制器和服务之间的关系。通过在控制器的构造函数中注入服务,可以在控制器中使用该服务的功能。
模块注册
控制器需要在模块中注册才能生效。通过 @Module
装饰器的 controllers
数组来注册控制器。
@Module({ controllers: [CatsController], }) export class CatsModule {}
示例代码
以下是一个完整的控制器示例:
-- -------------------- ---- ------- ------ - ----------- ---- ------ ----- ---- - ---- ----------------- ------ - ----------- - ---- ----------------- ------ - ------------ - ---- ----------------------- ------------------- ------ ----- -------------- - ------------------- -------- ------------ ------------ -- ------ ---------- ------ - ------ --------------------------- - ----------- -------------------- --- -------- ------ - ------ ----------------------------- - ------- -------------- ------------- -------------- ------ - ------ -------------------------------------- - -
在这个示例中,CatsController
处理 /cats
路径下的请求,并通过 CatsService
来执行具体的业务逻辑。