推荐答案
在 Nest.js 中,路由可以通过控制器(Controller)来定义。控制器负责处理传入的请求并返回响应。路由的定义通常是通过装饰器来实现的,以下是定义路由的基本步骤:
- 创建控制器:使用
@Controller()装饰器定义一个控制器类。 - 定义路由:在控制器类中,使用
@Get()、@Post()、@Put()、@Delete()等装饰器来定义具体的路由。
示例代码:
// www.javascriptcn.com code example
import { Controller, Get, Post, Body, Param } from '@nestjs/common';
@Controller('users')
export class UsersController {
@Get()
findAll(): string {
return 'This action returns all users';
}
@Get(':id')
findOne(@Param('id') id: string): string {
return `This action returns a user with id ${id}`;
}
@Post()
create(@Body() user: any): string {
return 'This action adds a new user';
}
}在这个示例中:
@Controller('users')定义了一个基础路由/users。@Get()定义了一个处理 GET 请求的路由/users。@Get(':id')定义了一个处理 GET 请求的路由/users/:id。@Post()定义了一个处理 POST 请求的路由/users。
本题详细解读
1. 控制器的定义
在 Nest.js 中,控制器是处理 HTTP 请求的核心部分。通过 @Controller() 装饰器,你可以定义一个控制器类,并指定该控制器的基本路由路径。例如,@Controller('users') 表示该控制器处理的所有路由都将以 /users 为前缀。
2. 路由方法的定义
在控制器类中,你可以定义多个方法来处理不同的 HTTP 请求。每个方法都可以通过特定的装饰器来定义其对应的 HTTP 方法和路由路径。
@Get():用于处理 GET 请求。你可以指定一个路径参数,例如@Get(':id'),表示处理/users/:id的 GET 请求。@Post():用于处理 POST 请求。通常用于创建资源。@Put():用于处理 PUT 请求。通常用于更新资源。@Delete():用于处理 DELETE 请求。通常用于删除资源。
3. 请求参数的获取
在路由处理方法中,你可以通过装饰器来获取请求中的参数、查询参数、请求体等。
@Param():用于获取路由参数。例如,@Param('id')可以获取/users/:id中的id值。@Body():用于获取请求体中的数据。通常用于 POST 或 PUT 请求。@Query():用于获取查询参数。例如,@Query('name')可以获取/users?name=John中的name值。
4. 路由的响应
路由处理方法可以返回任何类型的数据,Nest.js 会自动将其序列化为 JSON 格式并发送给客户端。你也可以手动返回一个 Response 对象来控制响应的状态码、头信息等。
5. 路由的模块化
在 Nest.js 中,控制器通常属于某个模块(Module)。你需要将控制器注册到模块中,以便 Nest.js 能够识别并处理这些路由。
import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
@Module({
controllers: [UsersController],
})
export class UsersModule {}通过这种方式,你可以将路由逻辑模块化,便于管理和维护。