我想在路线的身体验证中使用白名单。我希望只接受对我的模型进行确认的数据,并且如果发送的参数不属于我的模型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”作为参数;我希望会引发错误,但是没有错误
答案 0 :(得分:1)
选项whitelist
仅在将json转换为您的dto类 时剥离未知值,而不会引发错误,因此在您的情况下,属性test
被无提示删除。
如果要在遇到未知属性时引发验证错误,则需要添加选项forbidNonWhitelisted
:
@UsePipes(
new ValidationPipe({
transform: true,
whitelist: true,
forbidNonWhitelisted: true,
}),
)