如何在 Nest.js 中定义控制器?

推荐答案

在 Nest.js 中,控制器是处理传入请求并返回响应的核心部分。控制器通过装饰器来定义路由和处理程序。以下是如何在 Nest.js 中定义一个控制器的基本步骤:

  1. 创建控制器类:使用 @Controller() 装饰器来定义一个控制器类。装饰器中的参数是路由的前缀。

    -- -------------------- ---- -------
    ------ - ----------- --- - ---- -----------------
    
    -------------------
    ------ ----- -------------- -
      ------
      ---------- ------ -
        ------ ----- ------ ------- --- ------
      -
    -
  2. 定义路由处理程序:在控制器类中,使用 @Get()@Post()@Put()@Delete() 等装饰器来定义处理特定 HTTP 请求的方法。

  3. 依赖注入:控制器可以通过构造函数注入服务或其他依赖项。

  4. 注册控制器:在模块中注册控制器,使其生效。

本题详细解读

控制器的基本概念

在 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 数组来注册控制器。

示例代码

以下是一个完整的控制器示例:

-- -------------------- ---- -------
------ - ----------- ---- ------ ----- ---- - ---- -----------------
------ - ----------- - ---- -----------------
------ - ------------ - ---- -----------------------

-------------------
------ ----- -------------- -
  ------------------- -------- ------------ ------------ --

  ------
  ---------- ------ -
    ------ ---------------------------
  -

  -----------
  -------------------- --- -------- ------ -
    ------ -----------------------------
  -

  -------
  -------------- ------------- -------------- ------ -
    ------ --------------------------------------
  -
-

在这个示例中,CatsController 处理 /cats 路径下的请求,并通过 CatsService 来执行具体的业务逻辑。

纠错
反馈