Menu
CoddyTech

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.

challenge icon

Görev

Kolay

Bir 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.

  1. src/main.ts içinde, bootstrap'ın zaten kaydettiği ValidationPipe'ı bulun. Ona iki seçenek verin: doğrulama dekoratörü olmayan her alanı kaldıran whitelist: true ve alanı kaldırmak yerine böyle bir gövdeyi 400 ile reddeden forbidNonWhitelisted: true. İkinci seçenek yalnızca birincisiyle birlikte çalışır.
  2. Başka hiçbir şeyi değiştirmeyin. Yalnızca title ve done iç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();
quiz iconKendini test et

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

Kendi başına pratik yap: Express playground