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

Быстрый старт

Обзор разработки плагинов
Создание первого плагина
Структура каталогов проекта

Серверная разработка

Обзор
Плагин
Коллекции (таблицы данных)
Операции с базой данных
Управление источниками данных (DataSourceManager)
Управление ресурсами (ResourceManager)
Контроль доступа (ACL)
Промежуточное ПО (Middleware)
Кэш
Событие
Контекст запроса
Миграции
Логгер
Интернационализация (I18n)
Командная строка
Управление задачами Cron (CronJobManager)
Тестирование

Клиентская разработка

Обзор
Плагин
Контекст
Маршрутизатор
Контроль доступа (ACL)
Управление источниками данных (DataSourceManager)
Ресурс
Запрос
Стили и темы
Логгер
Интернационализация (I18n)
Тестирование

Прочее

Руководство по обновлению плагинов
Список языков
Управление зависимостями
Сборка
Previous PageКэш
Next PageКонтекст запроса
Уведомление о переводе ИИ

Эта документация была автоматически переведена ИИ.

#События

Сервер 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('Данные будут обновлены!');
});