javascript - 为什么白名单不会因错误的模型 NestJs 而出错

标签 javascript node.js angular typescript nestjs

我想在路由的主体验证中使用白名单。我希望只接受确认我的模型的数据,如果发送的某些参数不属于我的模型 DTO,则必须抛出错误。

这是我的 DTO:

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

    @MinLength(8)
    password: string;

    @IsNotEmpty()
    seller: boolean;

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

这是我的 Controller :

@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"不能作为参数;我预计会抛出错误,但没有错误

最佳答案

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

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

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

关于javascript - 为什么白名单不会因错误的模型 NestJs 而出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55414165/

相关文章:

c# - 在两个网站之间制作弹出窗口

javascript - Node .js `request.get` : store body in variable

javascript - CORS策略阻止前端到后端的请求

javascript - switchMap 操作只在第一次调用时运行?

javascript - 根据变量angular生成动态css

javascript - 在 Javascript 文本框中名称不喜欢

javascript - 在 android chrome 浏览器上运行 ffmpeg.wasm 时出现错误 "WebAssembly.Memory(): could not allocate memory"

node.js - Mongo 查询没有给出聚合函数的准确结果

angular - typescript 对象集

javascript - 为什么下面给出的表达式在 javascript 中的计算结果为 30?