الحقول غير المعروفة
جزء من قسم 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.
التحدي
سهل- لا تُصرّح
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();
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.