Nest.js 只接受在 DTO 中指定的字段

Nest.js only accept fields that are specified in a DTO

我目前正在研究 Nest.js 并且有一个简单的应用程序,其中包含注册帐户的途径。我创建了一个包含几个字段的 DTO 以及一个 mongodb 模式。 mongodb 模式中只有一个字段我不想让用户在创建时修改(=特权),所以我没有在 DTO 中指定它。

但是,如果用户在正文中使用权限 属性 发出请求,它仍会保存到 DTO,然后保存在架构中。

有没有办法从正文中“切断”与 DTO 不匹配的任何数据?我确定它曾经告诉我有一个它无法识别的字段,但它似乎不再起作用了。我试图找到一个 class 验证器或其他东西,但找不到合适的东西,我真的不想自己检查每个 属性...

提前致谢!


来自 account.service.ts

  async register(body: RegisterAccountDto) {
    return new_account.save();
  }

来自 account.controller.ts

  @ApiOperation({ summary: 'Register user', description: 'Register a new account' })
  @ApiConsumes('x-www-form-urlencoded')
  @ApiBody({ type: [RegisterAccountDto] })
  @Post('register')
  async register(@Body() body: RegisterAccountDto) {
    return this.accountService.register(body);
  }

来自 account.schema.ts

  @Prop({ default: Privilege.USER })
  privilege: Privilege;

为此,您需要将 nestjs 的验证管道与白名单一起使用 属性 true。

看看吧:NestJs Validation

转到 main.ts

添加导入:

import { ValidationPipe } from '@nestjs/common';

然后在声明应用程序的行下方添加此行:

app.useGlobalPipes(new ValidationPipe({
    whitelist: true
  }));