Menu
CoddyTech

Nieznane pola

Część sekcji TypeScript i NestJS ścieżki Node.js w Coddy. Lekcja 16 z 24.

Klient może wysłać pola, o których nie wspomina Twój DTO, takie jak { "title": "x", "admin": true }, a one dotrą do Twojego kodu bez zmian. ValidationPipe ma dla nich dwie opcje.

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

whitelist: true usuwa każde pole, które nie ma dekoratora walidacji, zanim metoda zobaczy treść żądania. Dodaj forbidNonWhitelisted: true, a potok zamiast tego odrzuci taką treść, zwracając kod 400 i "property admin should not exist". forbidNonWhitelisted działa tylko w połączeniu z whitelist; samodzielnie nic nie robi.

Ciche usuwanie sprawdza się w przypadku formularza, który wysyła dodatkowe dane wejściowe. Odrzucenie informuje klienta API o literówce, takiej jak titel.

challenge icon

Wyzwanie

Łatwy

Klient może wysłać pola, o których Twoje DTO w ogóle nie wspomina, takie jak "owner": "admin", a obecnie trafiają one do Twojego kodu bez żadnych zmian. Spraw, by API je odrzucało, aby klient dowiedział się o literówce lub podejrzanym dodatkowym polu.

  1. W src/main.ts znajdź ValidationPipe, który bootstrap już rejestruje. Przekaż mu dwie opcje: whitelist: true, która usuwa każde pole bez dekoratora walidacji, oraz forbidNonWhitelisted: true, która odrzuca takie żądanie z kodem 400 zamiast usuwać pole. Druga opcja działa tylko w połączeniu z pierwszą.
  2. Nie zmieniaj niczego więcej. Żądania zawierające tylko title i done nadal będą działać, a nieprawidłowy tytuł nadal będzie odrzucany.

Wypróbuj: wyślij POST z { "title": "Book flights", "owner": "admin" } do /tasks. Otrzymasz kod 400:

{ "message": ["property owner should not exist"], "error": "Bad Request", "statusCode": 400 }

Następnie wyślij POST z { "title": "Book flights" }: otrzymasz kod 201 i nowe zadanie. { "title": 7 } nadal zwróci kod 400.

Spróbuj swoich sił

import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
    const app = await NestFactory.create(AppModule);
    app.useGlobalPipes(new ValidationPipe());
    await app.listen(3000);
}
bootstrap();
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji TypeScript i NestJS

Poćwicz samodzielnie: Edytor online Express