Bilinmeyen Alanlar
Coddy'nin Node.js Journey'sinin TypeScript ve NestJS bölümünün bir parçası. Ders 16 / 24.
Bir istemci, DTO’nuzda hiç belirtilmeyen { "title": "x", "admin": true } gibi alanlar gönderebilir ve bu alanlar kodunuza olduğu gibi ulaşır. ValidationPipe bu alanlar için iki seçeneğe sahiptir.
app.useGlobalPipes(
new ValidationPipe({ whitelist: true }),
);whitelist: true, gövde metodunuz tarafından görülmeden önce doğrulama dekoratörü olmayan tüm alanları kaldırır. forbidNonWhitelisted: true eklediğinizde, pipe bunun yerine böyle bir gövdeyi 400 hatasıyla ve "property admin should not exist" mesajıyla reddeder. forbidNonWhitelisted yalnızca whitelist ile birlikte çalışır; tek başına hiçbir şey yapmaz.
Fazladan girdiler gönderen bir form için sessizce kaldırmak uygundur. Reddetmek ise API istemcisine titel gibi bir yazım hatası olduğunu bildirir.
Görev
KolayBir istemci, DTO'nuzun hiç belirtmediği "owner": "admin" gibi alanlar gönderebilir ve şu anda bunlar kodunuza olduğu gibi ulaşır. API'nin bunları reddetmesini sağlayın; böylece yazım hatası yapan veya gizlice fazladan alan ekleyen bir istemci bunu öğrenir.
src/main.tsiçinde,bootstrap'ın zaten kaydettiğiValidationPipe'ı bulun. Ona iki seçenek verin: doğrulama dekoratörü olmayan her alanı kaldıranwhitelist: trueve alanı kaldırmak yerine böyle bir gövdeyi 400 ile reddedenforbidNonWhitelisted: true. İkinci seçenek yalnızca birincisiyle birlikte çalışır.- Başka hiçbir şeyi değiştirmeyin. Yalnızca
titlevedoneiçeren gövdeler çalışmaya devam eder ve hatalı bir başlık yine reddedilir.
Deneyin: /tasks adresine POST ile { "title": "Book flights", "owner": "admin" } gönderin. 400 alırsınız:
{ "message": ["property owner should not exist"], "error": "Bad Request", "statusCode": 400 }Ardından { "title": "Book flights" } değerini POST ile gönderin: 201 ve yeni görev. { "title": 7 } yine 400 alır.
Kendin dene
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();
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
TypeScript ve NestJS bölümündeki tüm dersler
1Nest Temelleri
Sınıflar ve MetotlarMerhaba, NestBir Controller Kaydetme4Guard’lar, Filtreler, Interceptor’lar
Guard’larKendi başına pratik yap: Express playground