返回

初探Nest.js框架——Controller简介

后端

深入浅出:揭秘 Nest.js 框架中的 Controller

什么是 Controller?

Controller 是 Nest.js 框架中至关重要的元素,负责处理来自客户端的 HTTP 请求,并返回相应的响应。它类似于传统 MVC 架构中的 Controller 层,负责定义应用程序的路由并根据用户的请求执行适当的操作。

定义 Controller

在 Nest.js 中,使用 @Controller 装饰器来定义 Controller。例如,以下代码创建一个简单的 CoffeeController:

import { Controller } from '@nestjs/common';

@Controller('coffees')
export class CoffeeController {}

这个示例表明 CoffeeController 将处理以 /coffees 为前缀的路由。这意味着,当有 HTTP 请求到达 /coffees 路由时,Nest.js 会将该请求委托给 CoffeeController 处理。

处理 HTTP 请求

Controller 使用 HTTP 方法装饰器来定义处理不同 HTTP 请求的方法。例如,@Get 装饰器标记一个方法来处理 GET 请求:

import { Controller, Get } from '@nestjs/common';

@Controller('coffees')
export class CoffeeController {
  @Get()
  findAll() {
    return 'This action returns all coffees';
  }
}

当 GET 请求到达 /coffees 路由时,Nest.js 将调用 CoffeeController 的 findAll 方法来处理该请求。

获取请求参数

Controller 还可以使用参数装饰器从请求中获取参数。例如,@Param 装饰器用于从请求中提取 id 参数:

import { Controller, Get, Param } from '@nestjs/common';

@Controller('coffees')
export class CoffeeController {
  @Get(':id')
  findOne(@Param('id') id: string) {
    return `This action returns coffee #${id}`;
  }
}

当 GET 请求到达 /coffees/:id 路由时,Nest.js 将调用 CoffeeController 的 findOne 方法来处理该请求,并将 id 参数传递给该方法。

其他 Controller 功能

Controller 可以使用其他装饰器实现更多功能,例如:

  • @Post:处理 POST 请求
  • @Put:处理 PUT 请求
  • @Delete:处理 DELETE 请求

结论

Controller 是 Nest.js 框架中不可或缺的概念,用于处理 HTTP 请求并生成响应。通过使用装饰器,我们可以轻松定义 Controller 及其处理不同 HTTP 请求的方法,以及从请求中获取参数。这使得构建 RESTful API 变得简单而高效。

常见问题解答

1. 如何创建嵌套路由?

在 Controller 中使用 @Controller 装饰器时,可以指定多层路由,例如:

@Controller('api/v1/coffees')
export class CoffeeController {}

这将创建以 /api/v1/coffees 为前缀的路由。

2. 如何处理错误?

Nest.js 提供了 @ExceptionFilter 装饰器来处理错误。它允许我们在 Controller 或服务中定义自定义错误处理逻辑。

3. Controller 和 Service 之间有什么区别?

Controller 负责处理 HTTP 请求,而 Service 负责业务逻辑。一般来说,我们避免在 Controller 中编写业务逻辑,而是将其委托给 Service。

4. 如何使用守卫?

守卫用于保护特定路由或整个 Controller。Nest.js 提供了 @UseGuards 装饰器来应用守卫。

5. 如何使用管道?

管道用于在请求到达 Controller 之前对请求和响应进行转换。Nest.js 提供了 @UsePipes 装饰器来应用管道。