Nest.js提供了一组管道API用以转换前端带来的请求参数,这些API也可以用来限制前端传来的参数类型。一共有以下几种:
- ValidationPipe
- ParseIntPipe(转换成int类型)
- ParseFloatPipe(转换成Float类型)
- ParseBoolPipe
- ParseArrayPipe
- ParseUUIDPipe(转换成UUID类型)
- ParseEnumPipe
- DefaultValuePipe
接下来我们通过一个简单的案例实践一下
import { Controller, Get, Param, ParseIntPipe, ParseUUIDPipe } from '@nestjs/common'; import { PService } from './p.service'; import * as uuid from 'uuid' @Controller('p') export class PController { constructor(private readonly pService: PService) {} @Get(':id') // 装饰器的第一个参数为匹配的动态路由,第二个参数为要使用的管道API create(@Param('id', ParseIntPipe) id) { console.log(typeof id); // number return true; } @Get('/edit/:uuid') edit(@Param('uuid',ParseUUIDPipe) id){ console.log(typeof id) // string return true } }
对于第一个请求,当我们访问localhost:3000/p/123时,nest.js会将前端传来的123(string类型)转化成number类型的123
对于第二个请求,当我们访问localhost:3000p/edit/123时浏览器会返回错误信息(异常捕捉器返回的),提示请求的参数不是UUID类型。当我们把请求URL改为localhost:3000p/edit/f82bfffb-ebeb-4eab-9e25-d198fddd4cc5时请求才会成功