الأنابيب: التحويل والتحقّق
الأنابيب: التحويل والتحقّق
يقع الأنبوب (pipe) بين الطلب الوارد ومعالجك، مؤدّيًا إحدى مهمّتين: التحويل (تحويل المدخل إلى الشكل المطلوب) أو التحقّق (فحص المدخل ورمي خطأ إن كان غير صالح). إنّ ValidationPipe من الدرس السابق ليس سوى أنبوب مدمج واحد — والآن لنفهم الآليّة.
الأنابيب المدمجة
يأتي NestJS بعدّة أنابيب جاهزة. وأشيعها يحوّل معاملات المسار النصّية إلى قيم مكتوبة الأنواع:
تشمل المدمجات الأخرى ParseUUIDPipe وParseBoolPipe وParseArrayPipe وParseEnumPipe وDefaultValuePipe.
ParseIntPipe القيمة '42' إلى الرقم 42 — ويرفض 'abc' بـ 400 قبل تشغيل معالجك.
أين يمكن تطبيق الأنابيب
- مستوى المعامل — على
@Param()/@Body()واحد (الأدق). - مستوى الدالّة — بـ
@UsePipes()على المعالج. - عام —
app.useGlobalPipes()فيmain.ts(يُطبَّق في كل مكان).
كتابة أنبوب مخصّص
الأنبوب المخصّص يُنفّذ PipeTransform ودالّة transform(value, metadata) واحدة. ما يُعيده يصبح وسيط المعالج؛ وما يرميه يصبح استجابة الخطأ:
وسيط البيانات الوصفية
يُخبر المعامل الثاني الأنبوبَ بماذا يعالج — النوع (body أو query أو param)، والنوع الفوقي المتوقَّع، واسم المعامل. وهكذا يعرف أنبوب عام كـ ValidationPipe أي صنف DTO يتحقّق منه:
الخلاصة
تُحوّل الأنابيب المدخلات أو تتحقّق منها قبل وصولها إلى معالجك. استخدم أنابيب مدمجة كـ ParseIntPipe لتحويل معاملات المسار وحراستها، واكتب أنابيب مخصّصة بتنفيذ PipeTransform.transform(). يتيح وسيط metadata للأنابيب العامة فحص ما تعالجه. تُربَط الأنابيب على مستوى المعامل أو الدالّة أو عام. تاليًا: الوسيطات، التي تعمل أبكر في دورة الحياة.