Menu
CoddyTech

الحقول غير المعروفة

جزء من قسم TypeScript وNestJS في رحلة Node.js على Coddy. الدرس 12 من 17.

يمكن للعميل إرسال حقول لم يذكرها DTO مطلقًا، مثل { "title": "x", "admin": true }، وستصل إلى شيفرتك كما هي دون تغيير. لدى ValidationPipe خياران للتعامل معها.

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

يزيل whitelist: true كل حقل لا يتضمن مُزيّن تحقق قبل أن ترى طريقتك محتوى الطلب. أضف forbidNonWhitelisted: true، وعندها يرفض الأنبوب محتوى الطلب هذا بدلًا من ذلك، مع رمز الحالة 400 والرسالة "property admin should not exist". لا يعمل forbidNonWhitelisted إلا مع whitelist؛ واستخدامه بمفرده لا يفعل شيئًا.

الحذف بصمت مناسب لنموذج يرسل مدخلات إضافية. أما الرفض فيُعلم عميل API بوجود خطأ إملائي، مثل titel.

challenge icon

التحدي

سهل
  • لا تُصرّح POST /tasks التي تحتوي على الحقل CreateTaskDto عن إجابة 400 التي تسمّي ذلك الحقل.
  • تظل الأجسام الصالحة تُرجع 201.
  • أرسل POST /tasks مع { "title": "Book flights", "owner": "admin" }، ثم مع { "title": "Book flights" }.

جرّب بنفسك

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 iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس TypeScript وNestJS