logologo
Bắt đầu
Hướng dẫn
Phát triển
Plugin
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Bắt đầu
Hướng dẫn
Phát triển
Plugin
API
logologo

Bắt đầu nhanh

Tổng quan phát triển plugin
Viết plugin đầu tiên
Cấu trúc thư mục dự án

Phát triển phía server

Tổng quan
Plugin
Collections (Bảng dữ liệu)
Thao tác Database
Quản lý DataSourceManager
Quản lý ResourceManager
Kiểm soát quyền ACL
Middleware
Cache
Event
Ngữ cảnh yêu cầu (Context)
Script nâng cấp (Migration)
Logger (Nhật ký)
I18n (Quốc tế hóa)
Command (Dòng lệnh)
Quản lý tác vụ định kỳ (CronJobManager)
Test

Phát triển phía client

Tổng quan
Plugin
Ngữ cảnh (Context)
Router
Kiểm soát quyền ACL
Quản lý DataSourceManager
Resource
Request
Styles & Themes
Logger (Nhật ký)
I18n (Quốc tế hóa)
Test

Khác

Hướng dẫn nâng cấp plugin
Danh sách ngôn ngữ
Quản lý phụ thuộc
Build
Previous PageCache
Next PageNgữ cảnh yêu cầu (Context)
TIP

Tài liệu này được dịch bởi AI. Đối với bất kỳ thông tin không chính xác nào, vui lòng tham khảo phiên bản tiếng Anh

#Sự kiện

Máy chủ (Server) của NocoBase kích hoạt các sự kiện (Event) tương ứng trong các giai đoạn như vòng đời ứng dụng, vòng đời plugin và các thao tác cơ sở dữ liệu. Các nhà phát triển plugin có thể lắng nghe các sự kiện này để triển khai logic mở rộng, các thao tác tự động hoặc hành vi tùy chỉnh.

Hệ thống sự kiện của NocoBase được chia thành hai cấp độ chính:

  • app.on() - Sự kiện cấp ứng dụng: Lắng nghe các sự kiện vòng đời của ứng dụng, như khởi động, cài đặt, bật plugin, v.v.
  • db.on() - Sự kiện cấp cơ sở dữ liệu: Lắng nghe các sự kiện thao tác ở cấp độ mô hình dữ liệu, như tạo, cập nhật, xóa bản ghi, v.v.

Cả hai đều kế thừa từ EventEmitter của Node.js, hỗ trợ sử dụng các giao diện chuẩn .on(), .off(), .emit(). NocoBase cũng mở rộng hỗ trợ emitAsync, được dùng để kích hoạt sự kiện không đồng bộ và chờ tất cả các trình lắng nghe hoàn thành việc thực thi.

#Vị trí đăng ký trình lắng nghe sự kiện

Các trình lắng nghe sự kiện thường nên được đăng ký trong phương thức beforeLoad() của plugin để đảm bảo các sự kiện đã sẵn sàng trong giai đoạn tải plugin và logic tiếp theo có thể phản hồi chính xác.

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

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

    // Lắng nghe sự kiện ứng dụng
    this.app.on('afterStart', () => {
      app.logger.info('NocoBase đã khởi động');
    });

    // Lắng nghe sự kiện cơ sở dữ liệu
    this.db.on('afterCreate', (model) => {
      if (model.collectionName === 'posts') {
        app.logger.info(`Bài viết mới: ${model.get('title')}`);
      }
    });
  }
}

#Lắng nghe sự kiện ứng dụng app.on()

Các sự kiện ứng dụng được dùng để nắm bắt các thay đổi trong vòng đời của ứng dụng và plugin NocoBase, phù hợp cho việc khởi tạo logic, đăng ký tài nguyên hoặc kiểm tra phụ thuộc của plugin, v.v.

#Các loại sự kiện phổ biến

Tên sự kiệnThời điểm kích hoạtCông dụng điển hình
beforeLoad / afterLoadTrước / sau khi tải ứng dụngĐăng ký tài nguyên, khởi tạo cấu hình
beforeStart / afterStartTrước / sau khi khởi động dịch vụKhởi động tác vụ, ghi log khởi động
beforeInstall / afterInstallTrước / sau khi cài đặt ứng dụngKhởi tạo dữ liệu, nhập mẫu
beforeStop / afterStopTrước / sau khi dừng dịch vụDọn dẹp tài nguyên, lưu trạng thái
beforeDestroy / afterDestroyTrước / sau khi hủy ứng dụngXóa bộ nhớ đệm, ngắt kết nối
beforeLoadPlugin / afterLoadPluginTrước / sau khi tải pluginSửa đổi cấu hình plugin hoặc mở rộng chức năng
beforeEnablePlugin / afterEnablePluginTrước / sau khi bật pluginKiểm tra phụ thuộc, khởi tạo logic plugin
beforeDisablePlugin / afterDisablePluginTrước / sau khi tắt pluginDọn dẹp tài nguyên plugin
afterUpgradeSau khi nâng cấp ứng dụng hoàn tấtThực hiện di chuyển dữ liệu hoặc sửa lỗi tương thích

Ví dụ: Lắng nghe sự kiện khởi động ứng dụng

app.on('afterStart', async () => {
  app.logger.info('🚀 Dịch vụ NocoBase đã khởi động!');
});

Ví dụ: Lắng nghe sự kiện tải plugin

app.on('afterLoadPlugin', ({ plugin }) => {
  app.logger.info(`Plugin ${plugin.name} đã được tải`);
});

#Lắng nghe sự kiện cơ sở dữ liệu db.on()

Các sự kiện cơ sở dữ liệu có thể nắm bắt nhiều thay đổi dữ liệu khác nhau ở cấp độ mô hình, phù hợp cho các thao tác như kiểm toán, đồng bộ hóa, tự động điền, v.v.

#Các loại sự kiện phổ biến

Tên sự kiệnThời điểm kích hoạt
beforeSync / afterSyncTrước / sau khi đồng bộ hóa cấu trúc cơ sở dữ liệu
beforeValidate / afterValidateTrước / sau khi xác thực dữ liệu
beforeCreate / afterCreateTrước / sau khi tạo bản ghi
beforeUpdate / afterUpdateTrước / sau khi cập nhật bản ghi
beforeSave / afterSaveTrước / sau khi lưu (bao gồm tạo và cập nhật)
beforeDestroy / afterDestroyTrước / sau khi xóa bản ghi
afterCreateWithAssociations / afterUpdateWithAssociations / afterSaveWithAssociationsSau các thao tác bao gồm dữ liệu liên kết
beforeDefineCollection / afterDefineCollectionTrước / sau khi định nghĩa bộ sưu tập
beforeRemoveCollection / afterRemoveCollectionTrước / sau khi xóa bộ sưu tập

Ví dụ: Lắng nghe sự kiện sau khi tạo dữ liệu

db.on('afterCreate', async (model, options) => {
  db.logger.info('Dữ liệu đã được tạo!');
});

Ví dụ: Lắng nghe sự kiện trước khi cập nhật dữ liệu

db.on('beforeUpdate', async (model, options) => {
  db.logger.info('Dữ liệu sắp được cập nhật!');
});