logologo
Começar
Manual
Desenvolvimento
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
Começar
Manual
Desenvolvimento
Plugins
API
logologo

Início rápido

Visão geral do desenvolvimento de plugins
Escrever o primeiro plugin
Estrutura de diretórios do projeto

Desenvolvimento do lado do servidor

Visão Geral
Plugin
Collections (Tabelas de dados)
Database (Operações de banco de dados)
DataSourceManager (Gerenciamento de fontes de dados)
ResourceManager (Gerenciamento de recursos)
ACL (Controle de acesso)
Middleware
Cache
Event (Evento)
Context (Contexto da requisição)
Migration (Script de atualização)
Logger (Log)
I18n (Internacionalização)
Command (Linha de comando)
CronJobManager (Gerenciamento de tarefas agendadas)
Test (Teste)

Desenvolvimento do lado do cliente

Visão Geral
Plugin
Context (Contexto)
Router (Rotas)
ACL (Controle de acesso)
DataSourceManager (Gerenciamento de fontes de dados)
Resource (Recurso)
Request (Requisição)
Estilos e temas
Logger (Log)
I18n (Internacionalização)
Test (Teste)

Outros

Guia de atualização de plugins
Lista de idiomas
Gerenciamento de dependências
Build
Previous PageCache
Next PageContext (Contexto da requisição)
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!');
});