跳至主要內容

管道

刘春龙原创...大约 1 分钟NodejsNestjs教程文档

管道是用 @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是字符串类型

上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7