管道
原创2026/3/5大约 1 分钟
管道是用 @Injectable() 装饰器注释的类,它实现了 PipeTransform 接口。

管道有两个典型的用例
- transformation: 将输入数据转换为所需的形式(例如,从字符串到整数)
- validation: 评估输入数据,如果有效,只需将其原样传递; 否则抛出异常
在这两种情况下,管道都在由 控制器路由处理器 处理的 arguments 上运行。 Nest 在调用方法之前插入一个管道,管道接收指定给该方法的参数并对它们进行操作。 任何转换或验证操作都会在此时发生,之后会使用任何(可能)转换的参数调用路由处理程序。
Nest 附带了许多内置管道,你可以开箱即用。 你还可以构建自己的自定义管道。
Nest 附带九个开箱即用的管道
- ValidationPipe
- ParseIntPipe
- ParseFloatPipe
- ParseBoolPipe
- ParseArrayPipe
- ParseUUIDPipe
- ParseEnumPipe
- DefaultValuePipe
- ParseFilePipe
它们是从 @nestjs/common 包中导出的。
使用管道
import { Controller, Get, Param, ParseIntPipe } from '@nestjs/common'
import { UserService } from './user.service'
@Controller('user')
export class UserController {
constructor(private readonly userService: UserService) {}
@Get(':id')
findOne(@Param('id', ParseIntPipe) id: number) {
return {
num: id,
}
}
}此时,我们访问http://localhost:3000/user/1可以看到返回信息,访问http://localhost:3000/user/a就看不到正常的返回信息了,提示"Validation failed (numeric string is expected)"该异常将阻止 findOne() 方法的主体执行。
提示
注意返回的num的类型,使用管道@Param('id', ParseIntPipe) id: number,返回的是数字类型,而不使用管道转换则@Param('id') id: number则返回的num是字符串类型
至此,本章节的学习就到此结束了,如有疑惑,可对接技术客服进行相关咨询。