logologo
开始
手册
开发
插件
API
English
简体中文
开始
手册
开发
插件
API
English
简体中文
logologo

快速入门

插件开发概述
编写第一个插件
项目目录结构

服务端开发

概述
Plugin 插件
Collections 数据表
Database 数据库操作
DataSourceManager 数据源管理
ResourceManager 资源管理
ACL 权限控制
Middleware 中间件
Cache 缓存
Event 事件
Context 请求上下文
Migration 升级脚本
Logger日志
I18n 国际化
Command 命令行
CronJobManager 定时任务管理
Test 测试

客户端开发

概述
Plugin 插件
Context 上下文
Router 路由
ACL 权限控制
DataSourceManager 数据源管理
Resource 资源
Request 请求
Styles & Themes 样式与主题
Logger 日志
I18n 国际化
Test 测试

其他

插件升级指南
语言列表
依赖管理
构建
Previous PageDatabase 数据库操作
Next PageResourceManager 资源管理

#DataSourceManager 数据源管理

NocoBase 提供了 DataSourceManager,用于多数据源管理。每个 DataSource 都有自己的 Database、ResourceManager 和 ACL 实例,便于开发者灵活地管理和扩展多个数据源。

#基本概念

每个 DataSource 实例包含以下内容:

  • dataSource.collectionManager:用于管理数据表和字段。
  • dataSource.resourceManager:处理与资源相关的操作(例如增删改查等)。
  • dataSource.acl:资源操作的访问控制(ACL)。

为了便捷访问,提供了主数据源相关成员的快捷别名:

  • app.db 等价于 dataSourceManager.get('main').collectionManager.db
  • app.acl 等价于 dataSourceManager.get('main').acl
  • app.resourceManager 等价于 dataSourceManager.get('main').resourceManager

#常用方法

#dataSourceManager.get(dataSourceKey)

该方法返回指定的 DataSource 实例。

const dataSource = dataSourceManager.get('main');

#dataSourceManager.use()

为所有数据源注册中间件。这将影响所有数据源的操作。

dataSourceManager.use((ctx, next) => {
  console.log('This middleware applies to all data sources.');
  await next();
});

#dataSourceManager.beforeAddDataSource()

在数据源加载之前执行。常用于静态类注册,如模型类、字段类型注册:

dataSourceManager.beforeAddDataSource((dataSource: DataSource) => {
  const collectionManager = dataSource.collectionManager;
  if (collectionManager instanceof SequelizeCollectionManager) {
    collectionManager.registerFieldTypes({
      belongsToArray: BelongsToArrayField, // 自定义字段类型
    });
  }
});

#dataSourceManager.afterAddDataSource()

在数据源加载之后执行。常用于注册操作、设置访问控制等。

dataSourceManager.afterAddDataSource((dataSource) => {
  dataSource.resourceManager.registerActionHandler('downloadXlsxTemplate', downloadXlsxTemplate);
  dataSource.resourceManager.registerActionHandler('importXlsx', importXlsx);
  dataSource.acl.allow('*', 'downloadXlsxTemplate', 'loggedIn'); // 设置访问权限
});

#数据源扩展

完整的数据源扩展请参考数据源扩展章节