javascript - De ce whitelist nu generează eroare cu model greșit în NestJs


Vreau să folosesc o listă albă în validarea corpului rutei mele. Mă aștept ca doar datele care corespund modelului meu să fie acceptate și dacă este trimis un parametru care nu face parte din DTO-ul modelului meu, trebuie să fie aruncată o eroare.

Acesta este DTO-ul meu :

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

    @MinLength(8)
    password: string;

    @IsNotEmpty()
    seller: boolean;

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

Acesta este controlerul meu :

@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};
}

Dar când am trimis aceste date nu am primit o eroare:

{
   "userName": "userdasdnasdasdadad",
   "password": "passwdasdasdasadasdasda",
   "address": {
      "city": "kiev",
      "street": "amosova"
   },
   "seller": false,
   "test": "test"
}

"test": "test" nu trebuie să fie permis ca parametru; mă aștept să fie aruncată o eroare, dar nu există niciuna

Răspuns #1

Opțiunea whitelist elimină doar valorile necunoscute atunci când json-ul este transformat în clasa ta dto fără a arunca o eroare, astfel încât în cazul tău proprietatea test este eliminată silențios.

Dacă doriți să generați o eroare de validare atunci când este întâlnită o proprietate necunoscută, trebuie să adăugați opțiunea forbidNonWhitelisted:

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