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。
转到 main.ts
添加导入:
import { ValidationPipe } from '@nestjs/common';
然后在声明应用程序的行下方添加此行:
app.useGlobalPipes(new ValidationPipe({
whitelist: true
}));
我目前正在研究 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。
转到 main.ts
添加导入:
import { ValidationPipe } from '@nestjs/common';
然后在声明应用程序的行下方添加此行:
app.useGlobalPipes(new ValidationPipe({
whitelist: true
}));