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)
Колекції (таблиці даних)
Операції з базою даних (Database)
Керування джерелами даних (DataSourceManager)
Керування ресурсами (ResourceManager)
Контроль доступу (ACL)
Проміжне ПЗ (Middleware)
Кеш (Cache)
Подія (Event)
Контекст запиту (Context)
Скрипт оновлення (Migration)
Логи (Logger)
Інтернаціоналізація (I18n)
Командний рядок (Command)
Керування завданнями за розкладом (CronJobManager)
Тестування (Test)

Клієнтська розробка

Огляд
Плагін (Plugin)
Контекст (Context)
Маршрутизатор (Router)
Контроль доступу (ACL)
Керування джерелами даних (DataSourceManager)
Ресурс (Resource)
Запит (Request)
Стилі та теми (Styles & Themes)
Логи (Logger)
Інтернаціоналізація (I18n)
Тестування (Test)

Інше

Посібник з оновлення плагінів
Список мов
Керування залежностями
Збірка
Previous PageКеш (Cache)
Next PageКонтекст запиту (Context)
Повідомлення про переклад ШІ

Ця документація була автоматично перекладена штучним інтелектом.

#Події

Сервер NocoBase генерує відповідні події протягом життєвого циклу застосунку, життєвого циклу плагінів та під час операцій з базою даних. Розробники плагінів можуть прослуховувати ці події для реалізації розширеної логіки, автоматизованих операцій або власної поведінки.

Система подій 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('Дані будуть оновлені!');
});