Aviso de tradução por IA

Esta documentação foi traduzida automaticamente por IA.

Eventos

O servidor do NocoBase (Server) dispara eventos correspondentes durante o ciclo de vida da aplicação, o ciclo de vida dos plugins e as operações de banco de dados. Desenvolvedores de plugins podem escutar esses eventos para implementar lógicas de extensão, operações automatizadas ou comportamentos personalizados.

O sistema de eventos do NocoBase é dividido principalmente em dois níveis:

  • app.on() - Eventos de Nível de Aplicação: Para escutar eventos do ciclo de vida da aplicação, como inicialização, instalação, ativação de plugins, etc.
  • db.on() - Eventos de Nível de Banco de Dados: Para escutar eventos de operações no nível do modelo de dados, como criação, atualização e exclusão de registros.

Ambos herdam do EventEmitter do Node.js, suportando as interfaces padrão .on(), .off() e .emit(). O NocoBase também estende o suporte para emitAsync, que é usado para disparar eventos de forma assíncrona e aguardar a conclusão da execução de todos os listeners.

Onde Registrar Listeners de Eventos

Os listeners de eventos geralmente devem ser registrados no método beforeLoad() do plugin. Isso garante que os eventos estejam prontos durante a fase de carregamento do plugin, permitindo que a lógica subsequente responda corretamente.

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

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

    // Escuta eventos da aplicação
    this.app.on('afterStart', () => {
      app.logger.info('NocoBase foi iniciado');
    });

    // Escuta eventos do banco de dados
    this.db.on('afterCreate', (model) => {
      if (model.collectionName === 'posts') {
        app.logger.info(`Novo post: ${model.get('title')}`);
      }
    });
  }
}

Escutando Eventos da Aplicação app.on()

Os eventos da aplicação são usados para capturar mudanças no ciclo de vida da aplicação NocoBase e dos plugins, sendo ideais para lógicas de inicialização, registro de recursos ou detecção de dependências de plugins.

Tipos Comuns de Eventos

Nome do EventoMomento do DisparoUsos Típicos
beforeLoad / afterLoadAntes / depois do carregamento da aplicaçãoRegistrar recursos, inicializar configuração
beforeStart / afterStartAntes / depois da inicialização do serviçoIniciar tarefas, registrar logs de inicialização
beforeInstall / afterInstallAntes / depois da instalação da aplicaçãoInicializar dados, importar modelos
beforeStop / afterStopAntes / depois da parada do serviçoLimpar recursos, salvar estado
beforeDestroy / afterDestroyAntes / depois da destruição da aplicaçãoExcluir cache, desconectar conexões
beforeLoadPlugin / afterLoadPluginAntes / depois do carregamento do pluginModificar configuração do plugin ou estender funcionalidades
beforeEnablePlugin / afterEnablePluginAntes / depois da ativação do pluginVerificar dependências, inicializar lógica do plugin
beforeDisablePlugin / afterDisablePluginAntes / depois da desativação do pluginLimpar recursos do plugin
afterUpgradeApós a conclusão da atualização da aplicaçãoExecutar migração de dados ou correções de compatibilidade

Exemplo: Escutando o evento de inicialização da aplicação

app.on('afterStart', async () => {
  app.logger.info('🚀 NocoBase serviço foi iniciado!');
});

Exemplo: Escutando o evento de carregamento de plugin

app.on('afterLoadPlugin', ({ plugin }) => {
  app.logger.info(`Plugin ${plugin.name} foi carregado`);
});

Escutando Eventos do Banco de Dados db.on()

Os eventos de banco de dados podem capturar várias mudanças de dados no nível do modelo, sendo adequados para operações de auditoria, sincronização, preenchimento automático, entre outras.

Tipos Comuns de Eventos

Nome do EventoMomento do Disparo
beforeSync / afterSyncAntes / depois da sincronização da estrutura do banco de dados
beforeValidate / afterValidateAntes / depois da validação de dados
beforeCreate / afterCreateAntes / depois da criação de registros
beforeUpdate / afterUpdateAntes / depois da atualização de registros
beforeSave / afterSaveAntes / depois de salvar (inclui criação e atualização)
beforeDestroy / afterDestroyAntes / depois da exclusão de registros
afterCreateWithAssociations / afterUpdateWithAssociations / afterSaveWithAssociationsApós operações que incluem dados associados
beforeDefineCollection / afterDefineCollectionAntes / depois da definição de coleções
beforeRemoveCollection / afterRemoveCollectionAntes / depois da remoção de coleções

Exemplo: Escutando o evento após a criação de dados

db.on('afterCreate', async (model, options) => {
  db.logger.info('Dados foram criados!');
});

Exemplo: Escutando o evento antes da atualização de dados

db.on('beforeUpdate', async (model, options) => {
  db.logger.info('Dados estão prestes a ser atualizados!');
});