自定义插件

插件是ibird中非常重要的一个概念。在使用ibird的过程中,当你发现核心模块的功能已经无法满足你的需求时,你可以通过引用插件的方式来扩展应用。

写在前面

插件的设计非常灵活,每个插件都拥有自己特定的职责,并对外提供可调用的接口或路由。插件采取轻量化设计,它本身就是一个普通的Node模块。现有的插件都可以在插件中心搜索到,目前已有很多实用的插件,如日志插件(ibird-log)、令牌插件(ibird-token)、任务插件(ibird-task)等。你也可以按照规范开发自己的插件。插件的命名一般都以ibird-开头,后面跟插件的英文代码,如日志插件为ibird-log,任务插件为ibird-task等。

ibird提供的所有模块中,除了ibird-core以外,其他的模块全是插件。插件的存在是为了使ibird变得更加强大,通过结合插件的使用,你会发现很多意想不到的功能。

使用插件

插件的使用非常简单,下面以日志插件为例:

安装插件

npm i ibird-log -S

引用插件

为了更清晰地描述,这里只展示引用插件的方法,关于ibird核心模块的使用,请移步这里

const app = require('ibird-core');
const log = require('ibird-log');

app.import(log); // app为ibird的应用对象

当插件被成功import之后,ibird的会做这么几件事:

  • 自动注册插件中所有开放的数据模型
  • 自动挂载插件中所有开放的中间件
  • 自动挂载插件中所有开放的路由

如果你不想让ibird自动化导入插件,你也可以获取插件的相关部分,然后自己决定相关信息的导入:

const test = require('ibird-test');
// 插件的数据模型部分,可以直接调用app.model注册
const testModel = test.model;
// 插件的中间件部分,可以直接调用app.use挂载中间件
const testMiddleware = test.middleware;
// 插件的路由部分,可以直接调用app.mount挂载路由
const testRoute = test.route;

如果需要调用插件开放的接口(非路由,限服务端调用的内部接口),可以这样做:

const test = require('ibird-test');

test.method1('test...');
test.method2('test...');

Tips:这里需要注意的是,并非每一个插件都有开放的API,使用插件前,请先认真阅读该插件的使用文档。

插件开发

如果现有的插件依然满足不了你的需求,你也可以尝试自己开发一个ibird插件。插件的开发也很简单,每个插件实际上就是一个完整的Node模块,你完全可以按照Node的开发标准去实现的你的插件,只有一点需要注意的是,你的模块的入口文件需要导出一个对象,该对象中至少要包含三个键:

module.exports = {
  model: {}, 
  middleware: fn, 
  route: fn, 
  ...... 
};

model

插件导出的数据模型,对象类型,其中key为模型编码,value为模型对象,模型对象的格式参考ibird核心文档。

middleware

插件开放的中间件,函数类型,传入参数koa应用实例对象。

route

插件开放的路由,函数类型,传入参数为koa-router实例对象。

注意事项

在设计插件的过程中,需要注意以下几点:

  1. 尽可能轻量化,每个插件争取只处理单一职责的任务
  2. 在涉及到数据模型的定义时,你需要额外引入mongoose模块
  3. 按规定导出入口文件

Tips:为了规范插件的使用,无论你是否存在相应的信息(模型、中间件、路由和内部接口),你的入口文件皆应按照以上规则导出。

results matching ""

    No results matching ""