المُزخرِفات المخصّصة
المُزخرِفات المخصّصة
استخدمت مُزخرِفات كثيرة — @Get() و@Body() و@UseGuards(). يتيح لك NestJS بناء مُزخرِفاتك، فتصبح المتحكّمات أنظف والمقصد أوضح. يغطّي هذا الدرس مُزخرِفات المعاملات ومُزخرِفات البيانات الوصفية ودمجها — ويجمع دورة حياة الطلب كاملةً.
مُزخرِفات المعاملات المخصّصة
الوصول إلى الطلب لجلب القيمة نفسها في كل معالج تكرار مُملّ. يستخرجها مُزخرِف معامل مخصّص مرّة واحدة، تصريحيًّا. المثال الكلاسيكي مُزخرِف @User() يسحب المستخدم المُصادَق من الطلب:
الآن يقرأ أي معالج المستخدم بمعامل نظيف ذاتي الوصف:
data هو ما تمرّره إلى المُزخرِف — فـ @User('email') يمرّر 'email' كـ data. وهذا يتيح لمُزخرِف واحد إعادة الكائن كاملًا أو حقلًا واحدًا.
مُزخرِفات البيانات الوصفية
قابلت @SetMetadata() مع الحُرّاس. تغليفها في مُزخرِف مُسمّى يجعل المقصد واضحًا ويتفادى النصوص السحرية المبعثرة في الكود:
يقرأه الحارس المطابق بـ reflector.get('roles', context.getHandler())، تمامًا كما في درس الحُرّاس.
تركيب المُزخرِفات
تَحزِم applyDecorators() عدّة مُزخرِفات في مُزخرِف واحد قابل لإعادة الاستخدام — رائعة لتركيبة شائعة كـ "يتطلّب مصادقة + دورًا + توثيق Swagger":
دورة حياة الطلب كاملةً
بعد أن قابلت كل لبنة، هذا ترتيب تدفّق كل طلب:
الخلاصة
تجعل المُزخرِفات المخصّصة المتحكّمات مُعبّرة: تستخرج createParamDecorator بيانات الطلب (مثل @User())، وتُرفِق أغلفة SetMetadata (مثل @Roles()) بياناتٍ وصفية للحُرّاس، وتُركّب applyDecorators عدّةً في واحد. وبعد أن اتّضحت دورة الحياة كاملةً — الوسيطات والحُرّاس والمعترِضات والأنابيب والمعالج والمرشّحات — أكملت المرحلة الثالثة وتستطيع بناء معالجة طلبات NestJS متينة ومُهيكَلة جيدًا.