本文最后更新于:2024年4月25日 上午
安装与初始化
路由controller
1 2 3 4 5 6 7
| @Controller('user') export class UserController { @Get() getUserInfo(@Query('id')) { return id } }
|
模块modules
服务service
请求参数校验
👎在service/controller中校验入参
很容易想到的入参校验就是在函数中使用if/esle
语句来判断
src/user/validators/user.dto.ts
1 2 3 4
| export class CreateUserDto { username: string password: string }
|
src/user/user.controller.ts
1 2 3 4 5 6 7 8 9 10 11
| import ...
@Controller('user') export class UserController { @Post('/login') login(@Body() { username, password }: CreateUserDto) { if (!user || !password) return new HttpErrorByCode[400]('用户名/密码为空') return this.UserService.login(username, password) } }
|
这虽然可以很快的解决问题, 但代码的可读性与维护性会大打折扣
使用管道(Pipe)修饰
nestjs
内置了几个验证管道
ValidationPipe
ParseIntPipe
ParseFloatPipe
ParseBoolPipe
ParseArrayPipe
ParseUUIDPipe
ParseEnumPipe
DefaultValuePipe
ParseFilePipe
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import ...
@Controller('user') export class TestPipeController { @Get('/:id') testPipe( @Param( 'id', new ParseIntPipe({ exceptionFactory: () => new HttpErrorByCode[400]('参数错误'), }), ) id: string, ) { return id } }
|
class-validator方案
1
| pnpm i class-validator class-transformer
|
src/user/validators/user.dto.ts