Почему белый список не выдает ошибку с неправильной моделью NestJs - PullRequest
2 голосов
/ 29 марта 2019

Я хочу использовать белый список в проверке тела моего маршрута.Я ожидаю, что принимаются только данные, подтверждающие мою модель, и если передается какой-либо параметр, который не является частью 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"
}

«тест»: «тест» не должен быть разрешен в качестве параметра;Я ожидаю, что будет выдана ошибка, но ее нет

1 Ответ

1 голос
/ 29 марта 2019

Опция whitelist удаляет только неизвестные значения, когда json преобразуется в класс dto без , выдавая ошибку, поэтому в вашем случае свойство test удаляется без вывода сообщений.

Если вы хотите выдать ошибку проверки при обнаружении неизвестного свойства, вам нужно добавить параметр forbidNonWhitelisted:

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