nocobase/docs/zh-CN/api/server/application.md
Junyi 796e73ae5a
refactor(doc): change to new structure (#804)
* refactor(doc): change to new structure

* docs: add database docs

* docs: add collection docs

* docs: add db field examples

* docs(api): fix filename and menu path

* docs: add database docs

* docs: add db operators doc

* docs: add resourcer menu

* docs: add resourcer docs

* docs: fix api docs

* docs: refactor api menu structure

* feat: update docs (#830)

* feat: updates

* feat: update docs

* chore: ignore docs from ci

Co-authored-by: Junyi <mytharcher@users.noreply.github.com>
Co-authored-by: mytharcher <mytharcher@gmail.com>

* docs: add database methods docs

* docs: add missed api

* docs: fix api docs

* feat: update development docs (#833)

* feat: update development docs

* feat: update docs

* feat: update docs

* docs: add first plugin example (#834)

* feat: update docs

* feat: update docs

* docs: fix typo

Co-authored-by: chenos <chenlinxh@gmail.com>
2022-09-19 09:23:01 +08:00

7.5 KiB
Raw Blame History

Application

NocoBase 的应用程序类,服务端的应用进程将实例化该类并启动。因为继承自 Koa,所以也可以直接调用 Koa 实例的方法。

同时因为 Koa 还继承自 EventEmitter,所以也可以通过 app.on 监听事件。

构造函数

签名

  • constructor(options: ApplicationOptions)

创建一个应用实例。

参数

参数名 类型 默认值 描述
options.database IDatabaseOptions or Database {} 数据库配置
options.resourcer ResourcerOptions {} 资源路由配置
options.cors CorsOptions {} 跨域配置,参考 @koa/cors
options.dataWrapping boolean true 是否包装响应数据,true 则将把通常的 ctx.body 包装为 { data, meta } 的结构。
options.registerActions boolean true 是否注册默认的 action
options.i18n I18nOptions {} 国际化配置,参考 i18next
options.plugins PluginConfiguration[] [] 默认启用的插件配置

示例

import Application from '@nocobase/server';

const app = new Application({
  database: {
    dialect: 'mysql',
    host: 'localhost',
    port: 3306,
    username: 'root',
    password: '123456',
    database: 'test',
  },
  resourcer: {
    prefix: '/api',
  },
  cors: {
    origin: '*',
  }
});

实例成员

db

应用初始化自动创建的数据库实例,通过 @nocobase/database 封装的数据库访问类,相关方法参考 Database

resourcer

应用初始化自动创建的资源路由管理实例,相关方法参考 Resourcer

cli

应用初始化自动创建的命令行工具实例,相关方法参考 CLI

acl

应用初始化自动创建的访问控制表实例,相关方法参考 ACL

i18n

应用初始化自动创建的国际化工具实例,相关方法参考 I18n

appManager

应用初始化自动创建的应用管理实例,相关方法参考 AppManager

pm

应用初始化自动创建的插件管理器实例,相关方法参考 PluginManager

context

继承自 koa 的 context可以通过 app.context 访问,用于向每个请求注入上下文可访问的内容。参考 Koa Context

NocoBase 默认对 context 注入了以下成员,可以在请求处理函数中直接使用:

变量名 类型 描述
ctx.app Application 应用实例
ctx.db Database 数据库实例
ctx.resourcer Resourcer 资源路由管理器实例
ctx.action Action 资源操作相关对象实例
ctx.i18n I18n 国际化实例
ctx.getBearerToken() Function 获取请求头中的 bearer token

实例方法

getVersion()

获取当前版本。

签名

  • getVersion(): string

示例

console.log(app.getVersion()); // 0.7.4-alpha.7

plugin()

向应用中注册插件的快捷方法,等同于 app.pm.add(),参考 PluginManager

loadPluginConfig()

批量注册插件与默认参数。

签名

  • loadPluginConfig(pluginsConfigurations: PluginConfiguration[]): void

参数

参数名 类型 默认值 描述
pluginsConfigurations[] string - 插件的 npm 包名
pluginsConfigurations[] [string, any] - 插件的 npm 包名与默认参数

getPlugin()

获取已注册的插件实例,等同于 app.pm.get(name),参考 PluginManager

use()

注册应用级中间件的快捷方法,等同于 koa.use()

on()

订阅应用级事件,主要与生命周期相关,等同于 eventEmitter.on()。所有可订阅事件参考 事件

collection()

向数据库注册数据表模型的快捷方法,等同于 app.db.collection(),参考 Database

resource()

向资源路由管理器注册资源的快捷方法,等同于 app.resourcer.define(),参考 Resourcer

actions()

向资源路由管理器注册 action 的快捷方法,等同于 app.resourcer.registerActions(),参考 Resourcer

command()

向命令行工具注册命令的快捷方法,等同于 app.cli.command(),参考 cli

load()

应用生命周期方法,用于加载所有已注册的插件,等同于 app.pm.load(),参考 PluginManager

签名

  • async load(): Promise<void>

start()

启动应用,如果配置了监听的端口,将启动监听,之后应用即可接受 HTTP 请求。

签名

  • async start(options: StartOptions): Promise<void>

参数

参数名 类型 默认值 描述
options.listen? ListenOptions {} HTTP 监听参数对象
options.listen.port? number 13000 端口
options.listen.host? string 'localhost' 域名

事件

start() 调用会触发两个事件:

  • 'beforeStart':在应用启动前触发。
  • 'afterStart':在应用启动后触发。

stop()

停止应用,如果应用正在监听,将停止监听,并关闭数据库连接。

签名

  • async stop(options: any): Promise<void>
参数名 类型 默认值 描述
options? any - 将透传至停止事件的参数

事件

stop() 调用会触发两个事件:

  • 'beforeStop':在应用停止前触发。
  • 'afterStop':在应用停止后触发。

destroy()

销毁并停止应用,包含 stop() 的调用。

事件

destroy() 调用会触发两个事件:

  • 'beforeDestroy':在应用销毁前触发。
  • 'afterDestroy':在应用销毁后触发。

插件相关的销毁事件可以基于该事件进行扩展。

install()

应用初始化安装调用接口,用于安装应用的基础数据,包括:

  • 同步已通过 db.collection()db.import() 注入的数据库表结构到数据库。
  • 调用所有已注册插件实例的 install() 方法,执行相应安装过程。

事件

  • 'beforeInstall':在应用安装前触发。
  • 'afterInstall':在应用安装后触发。

upgrade()

应用调用接口,当更新新版本代码后通过命令行工具调用,用于执行应用的升级过程,包括:

  • 数据库迁移工具执行。

事件

  • 'beforeUpgrade':在应用升级前触发。
  • 'afterUpgrade':在应用升级后触发。

事件

应用生命周期会触发相应事件,扩展开发可以基于这些事件进行。

事件名称 是否异步 描述
'beforeInstall' 安装前触发
'afterInstall' 安装后触发
'beforeUpgrade' 升级前触发
'afterUpgrade' 升级后触发
'beforeStart' 启动前触发
'afterStart' 启动后触发
'beforeStop' 停止前触发
'afterStop' 停止后触发
'beforeDestroy' 销毁前触发
'afterDestroy' 销毁后触发

示例

app.on('beforeStart', async () => {
  console.log('app before start');
});