首页 > 解决方案 > 为什么白名单不会出现错误模型 NestJs 的错误

问题描述

我想在路线的正文验证中使用白名单。我希望只接受确认我的模型的数据,并且如果发送了一些不属于我的模型 DTO 的参数,则必须抛出错误。

这是我的 DTO:

export class RegisterDTO {
    @MinLength(5)
    userName: string;

    @MinLength(8)
    password: string;

    @IsNotEmpty()
    seller: boolean;

    address: {
        city: string;
        street: string;
        apartment?: string;
    };
}

这是我的控制器:

@Post('register')
@UsePipes(new ValidationPipe({ transform: true, whitelist: true}))
async register(@Body() userDTO: RegisterDTO) {
    const user = await this.userService.create(userDTO);
    const payload: Payload = {
        userName: user.userName,
        seller: user.seller,
    };

    const token = await this.authService.signPayload(payload);
    return {user, token};
}

但是当我发送此数据时,我没有收到错误消息:

{
   "userName": "userdasdnasdasdadad",
   "password": "passwdasdasdasadasdasda",
   "address": {
      "city": "kiev",
      "street": "amosova"
   },
   "seller": false,
   "test": "test"
}

"test": "test" 不能作为参数;我希望抛出一个错误,但没有

标签: javascriptnode.jsangulartypescriptnestjs

解决方案


该选项whitelist仅在将 json 转换为您的 dto 类而不引发错误时去除未知值,因此在您的情况下,该属性test被静默删除。

如果要在遇到未知属性时抛出验证错误,则需要添加选项forbidNonWhitelisted

@UsePipes(
    new ValidationPipe({
      transform: true,
      whitelist: true,
      forbidNonWhitelisted: true,
    }),
  )

推荐阅读