nest.js使用pipe和dto校验请求参数

安装依赖包:

npm install --save class-validator class-transformer

src/main.js中添加验证管道:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe({  // 验证管道
    whitelist: true,
    forbidNonWhitelisted: true  // 白名单之外的参数报错
  }))
  await app.listen(5200);
}
bootstrap();

ValidationPipe有很多参数可以设置,具体可以查看nest.js文档

 比如有一个user模块在src/user文件夹下,有一个post接口需要进行数据验证

创建user.dto.ts文件:


import { IsString, IsNumber, Min, IsIn, IsOptional, IsArray } from "class-validator";
import { Transform } from 'class-transformer';

export class UserDto {

    @Transform(({value})=> Number(value))  //强制把字符转数字
    @IsNumber()  //必须是数字
    @Min(1)  // 最小是1
    readonly id: number   // id是参数名

    @IsString()  //必须是字符
    readonly username: string

    @IsString()
    @IsOptional() //可选项,这个参数可以不发或者为空
    readonly intro: string

    @IsIn(['male','female'])  //参数值只能是数组中的其中一位成员
    readonly sex: string
}

class-validator中有很多验证条件,详细可以查询文档

在user/user.controller.ts中启用校验:

import {Controller,Post, Body} from '@nestjs/common'
import { UserService} from './user.service'
import { UserDto } from './user.dto';

@Controller('goods')
export class GoodsController {
    constructor(private readonly UserService: UserService) {}

    @Post()
    insert(@Body() body:UserDto):any {
        return this.UserService.insert(body)
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值