logologo
Start
Manual
Utveckling
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
Start
Manual
Utveckling
Plugins
API
logologo

Snabbstart

Översikt: Plugin-utveckling
Skriv ditt första plugin
Projektets katalogstruktur

Server-side-utveckling

Översikt
Plugin
Collections (datatabeller)
Database (databasåtgärder)
DataSourceManager (datakällshantering)
ResourceManager (resurshantering)
ACL (behörighetskontroll)
Middleware
Cache
Event (händelser)
Context (request-kontext)
Migration (uppgraderingsskript)
Logger (loggar)
I18n (internationalisering)
Command (kommandorad)
CronJobManager (schemalagda jobb)
Test (tester)

Klient-side-utveckling

Översikt
Plugin
Context (kontext)
Router (routing)
ACL (behörighetskontroll)
DataSourceManager (datakällshantering)
Resource (resurser)
Request (förfrågningar)
Stilar & teman
Logger (loggar)
I18n (internationalisering)
Test (tester)

Övrigt

Plugin-uppgraderingsguide
Språklista
Beroendehantering
Bygga
Previous PageCache
Next PageContext (request-kontext)
TIP

Detta dokument har översatts av AI. För eventuella felaktigheter, se den engelska versionen

#Händelser

NocoBases server utlöser motsvarande händelser under applikationens livscykel, plugin-programmens livscykel och databasoperationer. Plugin-utvecklare kan lyssna på dessa händelser för att implementera utökad logik, automatiska operationer eller anpassade beteenden.

NocoBases händelsesystem är huvudsakligen uppdelat i två nivåer:

  • app.on() - Applikationsnivåhändelser: Lyssna på applikationens livscykelhändelser, som start, installation, aktivering av plugin-program med mera.
  • db.on() - Databasnivåhändelser: Lyssna på operationer på datamodellnivå, som att skapa, uppdatera, ta bort poster med mera.

Båda ärver från Node.js EventEmitter och stöder de standardiserade gränssnitten .on(), .off() och .emit(). NocoBase har även utökat stödet för emitAsync, som används för att asynkront utlösa händelser och vänta tills alla lyssnare har slutfört sin exekvering.

#Var du registrerar händelselyssnare

Händelselyssnare bör generellt registreras i plugin-programmets beforeLoad()-metod, vilket säkerställer att händelserna är redo under plugin-programmets laddningsfas och att efterföljande logik kan svara korrekt.

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

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

    // Lyssna på applikationshändelser
    this.app.on('afterStart', () => {
      app.logger.info('NocoBase har startat');
    });

    // Lyssna på databashändelser
    this.db.on('afterCreate', (model) => {
      if (model.collectionName === 'posts') {
        app.logger.info(`Nytt inlägg: ${model.get('title')}`);
      }
    });
  }
}

#Lyssna på applikationshändelser app.on()

Applikationshändelser används för att fånga upp förändringar i NocoBase-applikationens och plugin-programmens livscykel, vilket är lämpligt för initialiseringslogik, resursregistrering eller detektering av plugin-beroenden.

#Vanliga händelsetyper

HändelsenamnUtlösningstidpunktTypiska användningsområden
beforeLoad / afterLoadFöre / efter applikationsladdningRegistrera resurser, initiera konfiguration
beforeStart / afterStartFöre / efter tjänststartStarta uppgifter, skriva ut startloggar
beforeInstall / afterInstallFöre / efter applikationsinstallationInitiera data, importera mallar
beforeStop / afterStopFöre / efter tjänststoppRensa resurser, spara tillstånd
beforeDestroy / afterDestroyFöre / efter applikationsförstöringTa bort cache, koppla från anslutningar
beforeLoadPlugin / afterLoadPluginFöre / efter plugin-laddningÄndra plugin-konfiguration eller utöka funktionalitet
beforeEnablePlugin / afterEnablePluginFöre / efter plugin-aktiveringKontrollera beroenden, initiera plugin-logik
beforeDisablePlugin / afterDisablePluginFöre / efter plugin-inaktiveringRensa plugin-resurser
afterUpgradeEfter att applikationsuppgradering slutförtsUtföra datamigrering eller kompatibilitetsfixar

Exempel: Lyssna på applikationsstartshändelse

app.on('afterStart', async () => {
  app.logger.info('🚀 NocoBase-tjänsten har startat!');
});

Exempel: Lyssna på plugin-laddningshändelse

app.on('afterLoadPlugin', ({ plugin }) => {
  app.logger.info(`Plugin-programmet ${plugin.name} har laddats`);
});

#Lyssna på databashändelser db.on()

Databashändelser kan fånga upp olika dataförändringar på modellnivå, vilket är lämpligt för granskning, synkronisering, automatisk ifyllning och andra operationer.

#Vanliga händelsetyper

HändelsenamnUtlösningstidpunkt
beforeSync / afterSyncFöre / efter synkronisering av databasstruktur
beforeValidate / afterValidateFöre / efter datavalidering
beforeCreate / afterCreateFöre / efter att poster skapas
beforeUpdate / afterUpdateFöre / efter att poster uppdateras
beforeSave / afterSaveFöre / efter spara (inkluderar skapa och uppdatera)
beforeDestroy / afterDestroyFöre / efter att poster tas bort
afterCreateWithAssociations / afterUpdateWithAssociations / afterSaveWithAssociationsEfter operationer som inkluderar associerad data
beforeDefineCollection / afterDefineCollectionFöre / efter att samlingar definieras
beforeRemoveCollection / afterRemoveCollectionFöre / efter att samlingar tas bort

Exempel: Lyssna på händelsen efter att data har skapats

db.on('afterCreate', async (model, options) => {
  db.logger.info('Data har skapats!');
});

Exempel: Lyssna på händelsen innan data uppdateras

db.on('beforeUpdate', async (model, options) => {
  db.logger.info('Data håller på att uppdateras!');
});