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

クイックスタート

プラグイン開発概要
最初のプラグインを作成
プロジェクトディレクトリ構造

サーバーサイド開発

概要
プラグイン
コレクション
データベース操作
データソース管理
リソース管理
ACL権限制御
ミドルウェア
キャッシュ
イベント
リクエストコンテキスト
マイグレーション
ロガー
I18n 国際化
コマンド
定時タスク管理
テスト

クライアントサイド開発

概要
プラグイン
コンテキスト
ルーター
ACL権限制御
データソース管理
リソース
リクエスト
スタイルとテーマ
ロガー
I18n 国際化
テスト

その他

プラグインアップグレードガイド
言語一覧
依存関係の管理
ビルド
Previous Pageキャッシュ
Next Pageリクエストコンテキスト
TIP

このドキュメントはAIによって翻訳されました。不正確な情報については、英語版をご参照ください

#イベント

NocoBaseのサーバーは、アプリケーションのライフサイクル、プラグインのライフサイクル、データベース操作など、様々な場面で関連するイベントをトリガーします。プラグイン開発者は、これらのイベントをリッスンすることで、拡張ロジックの実装、自動化された操作、またはカスタムな振る舞いを実現できます。

NocoBaseのイベントシステムは、主に以下の2つのレベルに分かれています。

  • app.on() - アプリケーションレベルイベント:アプリケーションの起動、インストール、プラグインの有効化など、アプリケーションのライフサイクルイベントをリッスンします。
  • db.on() - データベースレベルイベント:レコードの作成、更新、削除など、データモデルレベルの操作イベントをリッスンします。

どちらもNode.jsのEventEmitterを継承しており、標準の.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('データが更新されようとしています!');
});