logologo
البدء
الدليل
التطوير
الإضافات
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
البدء
الدليل
التطوير
الإضافات
API
logologo

بدء سريع

نظرة عامة على تطوير الإضافات
كتابة الإضافة الأولى
هيكل دليل المشروع

تطوير الواجهة الخلفية

نظرة عامة
Plugin
جداول بيانات Collections
عمليات Database
إدارة مصادر بيانات DataSourceManager
إدارة موارد ResourceManager
التحكم في أذونات ACL
Middleware
Cache
Event
سياق طلب Context
نص ترقية Migration
Logger
Telemetry
I18n (تدويل)
Command (سطر الأوامر)
إدارة المهام المجدولة CronJobManager
Test

تطوير الواجهة الأمامية

نظرة عامة
Plugin
Context (السياق)
Router
التحكم في أذونات ACL
إدارة مصادر بيانات DataSourceManager
Resource
Request
Styles & Themes (الأنماط والمظاهر)
Logger
I18n (تدويل)
Test

أخرى

دليل ترقية الإضافات
قائمة اللغات
إدارة التبعيات
البناء
Previous PageCache
Next Pageسياق طلب Context
إشعار الترجمة بالذكاء الاصطناعي

تمت ترجمة هذه الوثائق تلقائيًا بواسطة الذكاء الاصطناعي.

#الحدث

يُطلق خادم NocoBase أحداثًا (Events) متناسبة خلال مراحل دورة حياة التطبيق، ودورة حياة الإضافات، وعمليات قاعدة البيانات. يمكن لمطوري الإضافات الاستماع إلى هذه الأحداث لتنفيذ منطق التوسع، أو العمليات المؤتمتة، أو السلوكيات المخصصة.

ينقسم نظام الأحداث في NocoBase بشكل أساسي إلى مستويين:

  • app.on() - أحداث على مستوى التطبيق: للاستماع إلى أحداث دورة حياة التطبيق، مثل بدء التشغيل، والتثبيت، وتفعيل الإضافات، وما إلى ذلك.
  • db.on() - أحداث على مستوى قاعدة البيانات: للاستماع إلى أحداث العمليات على مستوى نموذج البيانات، مثل إنشاء السجلات أو تحديثها أو حذفها.

يرث كلاهما من EventEmitter الخاص بـ Node.js، ويدعمان استخدام الواجهات القياسية .on() و.off() و.emit(). كما وسعت NocoBase دعمها ليشمل emitAsync، والذي يُستخدم لإطلاق الأحداث بشكل غير متزامن والانتظار حتى يكمل جميع المستمعين تنفيذهم.

#أين يتم تسجيل مستمعي الأحداث

يجب تسجيل مستمعي الأحداث عادةً في دالة beforeLoad() الخاصة بالإضافة، وهذا يضمن أن الأحداث جاهزة خلال مرحلة تحميل الإضافة، وأن المنطق اللاحق يمكنه الاستجابة بشكل صحيح.

import { Plugin } from '@nocobase/server';

export default class PluginHelloServer extends Plugin {
  async beforeLoad() {

    // الاستماع إلى أحداث التطبيق
    this.app.on('afterStart', () => {
      app.logger.info('NocoBase بدأ التشغيل');
    });

    // الاستماع إلى أحداث قاعدة البيانات
    this.db.on('afterCreate', (model) => {
      if (model.collectionName === 'posts') {
        app.logger.info(`منشور جديد: ${model.get('title')}`);
      }
    });
  }
}

#الاستماع إلى أحداث التطبيق app.on()

تُستخدم أحداث التطبيق لالتقاط تغييرات دورة حياة تطبيق NocoBase والإضافات، وهي مناسبة لمنطق التهيئة، وتسجيل الموارد، أو اكتشاف تبعيات الإضافات، وما إلى ذلك.

#أنواع الأحداث الشائعة

اسم الحدثوقت الإطلاقالاستخدامات النموذجية
beforeLoad / afterLoadقبل / بعد تحميل التطبيقتسجيل الموارد، تهيئة الإعدادات
beforeStart / afterStartقبل / بعد بدء تشغيل الخدمةبدء المهام، طباعة سجلات بدء التشغيل
beforeInstall / afterInstallقبل / بعد تثبيت التطبيقتهيئة البيانات، استيراد القوالب
beforeStop / afterStopقبل / بعد إيقاف الخدمةتنظيف الموارد، حفظ الحالة
beforeDestroy / afterDestroyقبل / بعد تدمير التطبيقحذف ذاكرة التخزين المؤقت، قطع الاتصالات
beforeLoadPlugin / afterLoadPluginقبل / بعد تحميل الإضافةتعديل إعدادات الإضافة أو توسيع الوظائف
beforeEnablePlugin / afterEnablePluginقبل / بعد تفعيل الإضافةالتحقق من التبعيات، تهيئة منطق الإضافة
beforeDisablePlugin / afterDisablePluginقبل / بعد تعطيل الإضافةتنظيف موارد الإضافة
afterUpgradeبعد اكتمال ترقية التطبيقتنفيذ ترحيل البيانات أو إصلاحات التوافق

مثال: الاستماع إلى حدث بدء تشغيل التطبيق

app.on('afterStart', async () => {
  app.logger.info('🚀 خدمة NocoBase بدأت التشغيل!');
});

مثال: الاستماع إلى حدث تحميل الإضافة

app.on('afterLoadPlugin', ({ plugin }) => {
  app.logger.info(`تم تحميل الإضافة ${plugin.name}`);
});

#الاستماع إلى أحداث قاعدة البيانات db.on()

يمكن لأحداث قاعدة البيانات التقاط تغييرات البيانات المختلفة على مستوى النموذج، وهي مناسبة لعمليات التدقيق، والمزامنة، والتعبئة التلقائية، وغيرها.

#أنواع الأحداث الشائعة

اسم الحدثوقت الإطلاق
beforeSync / afterSyncقبل / بعد مزامنة هيكل قاعدة البيانات
beforeValidate / afterValidateقبل / بعد التحقق من صحة البيانات
beforeCreate / afterCreateقبل / بعد إنشاء السجلات
beforeUpdate / afterUpdateقبل / بعد تحديث السجلات
beforeSave / afterSaveقبل / بعد الحفظ (يشمل الإنشاء والتحديث)
beforeDestroy / afterDestroyقبل / بعد حذف السجلات
afterCreateWithAssociations / afterUpdateWithAssociations / afterSaveWithAssociationsبعد العمليات التي تتضمن بيانات مرتبطة
beforeDefineCollection / afterDefineCollectionقبل / بعد تعريف المجموعة
beforeRemoveCollection / afterRemoveCollectionقبل / بعد إزالة المجموعة

مثال: الاستماع إلى حدث ما بعد إنشاء البيانات

db.on('afterCreate', async (model, options) => {
  db.logger.info('تم إنشاء البيانات!');
});

مثال: الاستماع إلى حدث ما قبل تحديث البيانات

db.on('beforeUpdate', async (model, options) => {
  db.logger.info('البيانات على وشك التحديث!');
});