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

Inicio rápido

Resumen de desarrollo de plugins
Escribir el primer plugin
Estructura de directorios del proyecto

Desarrollo del lado del servidor

Visión general
Plugin
Colecciones
Operaciones de base de datos
Gestión de fuentes de datos
Gestión de recursos
Control de permisos (ACL)
Middleware
Caché
Evento
Contexto de solicitud
Migración (Script de actualización)
Registro (Logger)
Internacionalización (I18n)
Línea de comandos (Command)
Gestión de tareas programadas
Pruebas

Desarrollo del lado del cliente

Visión general
Plugin
Contexto
Enrutador (Router)
Control de permisos (ACL)
Gestión de fuentes de datos
Recurso
Solicitud
Estilos y temas
Registro (Logger)
Internacionalización (I18n)
Pruebas

Otros

Guía de actualización de plugins
Lista de idiomas
Gestión de dependencias
Compilación
Previous PageCaché
Next PageContexto de solicitud
Aviso de traducción por IA

Esta documentación ha sido traducida automáticamente por IA.

#Eventos

El servidor de NocoBase desencadena eventos correspondientes durante el ciclo de vida de la aplicación, el ciclo de vida de los plugins y las operaciones de la base de datos. Los desarrolladores de plugins pueden escuchar estos eventos para implementar lógica de extensión, operaciones automatizadas o comportamientos personalizados.

El sistema de eventos de NocoBase se divide principalmente en dos niveles:

  • app.on() - Eventos a nivel de aplicación: Permite escuchar los eventos del ciclo de vida de la aplicación, como el inicio, la instalación o la habilitación de plugins.
  • db.on() - Eventos a nivel de base de datos: Permite escuchar los eventos de operación a nivel del modelo de datos, como la creación, actualización o eliminación de registros.

Ambos heredan de EventEmitter de Node.js y admiten las interfaces estándar .on(), .off() y .emit(). NocoBase también extiende el soporte para emitAsync, que se utiliza para desencadenar eventos de forma asíncrona y esperar a que todos los oyentes finalicen su ejecución.

#Dónde registrar los oyentes de eventos

Los oyentes de eventos generalmente deben registrarse en el método beforeLoad() del plugin, para asegurar que los eventos estén listos durante la fase de carga del plugin y que la lógica posterior pueda responder de manera adecuada.

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

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

    // Escuchar eventos de la aplicación
    this.app.on('afterStart', () => {
      app.logger.info('NocoBase se ha iniciado');
    });

    // Escuchar eventos de la base de datos
    this.db.on('afterCreate', (model) => {
      if (model.collectionName === 'posts') {
        app.logger.info(`Nueva publicación: ${model.get('title')}`);
      }
    });
  }
}

#Escuchar eventos de la aplicación app.on()

Los eventos de la aplicación se utilizan para capturar los cambios en el ciclo de vida de la aplicación NocoBase y los plugins, y son adecuados para la lógica de inicialización, el registro de recursos o la detección de dependencias de plugins.

#Tipos de eventos comunes

Nombre del eventoMomento de activaciónUsos típicos
beforeLoad / afterLoadAntes / después de la carga de la aplicaciónRegistrar recursos, inicializar configuración
beforeStart / afterStartAntes / después del inicio del servicioIniciar tareas, registrar logs de inicio
beforeInstall / afterInstallAntes / después de la instalación de la aplicaciónInicializar datos, importar plantillas
beforeStop / afterStopAntes / después de la detención del servicioLimpiar recursos, guardar estado
beforeDestroy / afterDestroyAntes / después de la destrucción de la aplicaciónEliminar caché, desconectar conexiones
beforeLoadPlugin / afterLoadPluginAntes / después de la carga del pluginModificar la configuración del plugin o extender funcionalidades
beforeEnablePlugin / afterEnablePluginAntes / después de la habilitación del pluginVerificar dependencias, inicializar la lógica del plugin
beforeDisablePlugin / afterDisablePluginAntes / después de la deshabilitación del pluginLimpiar recursos del plugin
afterUpgradeDespués de completar la actualización de la aplicaciónEjecutar migración de datos o correcciones de compatibilidad

Ejemplo: Escuchar el evento de inicio de la aplicación

app.on('afterStart', async () => {
  app.logger.info('🚀 ¡El servicio de NocoBase se ha iniciado!');
});

Ejemplo: Escuchar el evento de carga de un plugin

app.on('afterLoadPlugin', ({ plugin }) => {
  app.logger.info(`El plugin ${plugin.name} se ha cargado`);
});

#Escuchar eventos de la base de datos db.on()

Los eventos de la base de datos pueden capturar varios cambios de datos a nivel del modelo, y son adecuados para auditorías, sincronización, autocompletado y otras operaciones.

#Tipos de eventos comunes

Nombre del eventoMomento de activación
beforeSync / afterSyncAntes / después de sincronizar la estructura de la base de datos
beforeValidate / afterValidateAntes / después de la validación de datos
beforeCreate / afterCreateAntes / después de crear registros
beforeUpdate / afterUpdateAntes / después de actualizar registros
beforeSave / afterSaveAntes / después de guardar (incluye creación y actualización)
beforeDestroy / afterDestroyAntes / después de eliminar registros
afterCreateWithAssociations / afterUpdateWithAssociations / afterSaveWithAssociationsDespués de operaciones que incluyen datos asociados
beforeDefineCollection / afterDefineCollectionAntes / después de definir colecciones
beforeRemoveCollection / afterRemoveCollectionAntes / después de eliminar colecciones

Ejemplo: Escuchar el evento después de la creación de datos

db.on('afterCreate', async (model, options) => {
  db.logger.info('¡Los datos se han creado!');
});

Ejemplo: Escuchar el evento antes de la actualización de datos

db.on('beforeUpdate', async (model, options) => {
  db.logger.info('¡Los datos están a punto de actualizarse!');
});