تمت ترجمة هذه الوثائق تلقائيًا بواسطة الذكاء الاصطناعي.
البرمجيات الوسيطة (Middleware) في خادم NocoBase هي في جوهرها برمجيات Koa الوسيطة. يمكنك التعامل مع كائن ctx لمعالجة الطلبات والاستجابات تمامًا كما تفعل في Koa. ولكن نظرًا لأن NocoBase يحتاج إلى إدارة منطق طبقات الأعمال المختلفة، فإن وضع جميع البرمجيات الوسيطة معًا سيجعل صيانتها وإدارتها أمرًا صعبًا للغاية.
لهذا السبب، يقسم NocoBase البرمجيات الوسيطة إلى أربعة مستويات:
برمجيات وسيطة على مستوى مصدر البيانات: app.dataSourceManager.use()
تؤثر فقط على طلبات مصدر بيانات معين، وتُستخدم عادةً لمنطق اتصالات قاعدة البيانات، أو التحقق من صحة الحقول، أو معالجة المعاملات لهذا المصدر.
برمجيات وسيطة على مستوى الموارد: app.resourceManager.use()
تكون فعالة فقط للموارد المعرفة، وهي مناسبة لمعالجة المنطق على مستوى الموارد، مثل صلاحيات البيانات أو التنسيق.
برمجيات وسيطة على مستوى الصلاحيات: app.acl.use()
تُنفذ قبل التحقق من الصلاحيات، وتُستخدم للتحقق من صلاحيات المستخدم أو أدواره.
برمجيات وسيطة على مستوى التطبيق: app.use()
تُنفذ مع كل طلب، وهي مناسبة لتسجيل السجلات، ومعالجة الأخطاء العامة، ومعالجة الاستجابات، وما إلى ذلك.
تُسجل البرمجيات الوسيطة عادةً في دالة load الخاصة بـ الإضافة، على سبيل المثال:
ترتيب تنفيذ البرمجيات الوسيطة هو كما يلي:
acl.use()resourceManager.use()dataSourceManager.use()app.use()before / after / tagللتحكم بمرونة أكبر في ترتيب البرمجيات الوسيطة، يوفر NocoBase المعاملات before و after و tag:
tag: لوضع علامة على البرمجيات الوسيطة لاستخدامها كمرجع بواسطة البرمجيات الوسيطة اللاحقة.before: للإدراج قبل البرمجيات الوسيطة ذات العلامة المحددة.after: للإدراج بعد البرمجيات الوسيطة ذات العلامة المحددة.مثال:
إذا لم يتم تحديد موضع، فإن ترتيب التنفيذ الافتراضي للبرمجيات الوسيطة المضافة حديثًا هو:
acl.use() -> resourceManager.use() -> dataSourceManager.use() -> app.use()
يتبع ترتيب تنفيذ البرمجيات الوسيطة نموذج "حلقة البصل" (Onion Model) الخاص بـ Koa، حيث تدخل البرمجيات الوسيطة إلى المكدس أولاً وتخرج منه أخيرًا.
أمثلة على ترتيب الإخراج عند الوصول إلى واجهات برمجة تطبيقات مختلفة:
طلب عادي: /api/hello
الإخراج: [1,2] (المورد غير معرف، لذا لا تُنفذ برمجيات resourceManager و acl الوسيطة)
طلب مورد: /api/test:list
الإخراج: [5,3,7,1,2,8,4,6]
تُنفذ البرمجيات الوسيطة وفقًا لترتيب الطبقات ونموذج "حلقة البصل".
before / after / tag للتحكم بمرونة في ترتيب التنفيذ.