定义Service

Service的定义方式与EggJS一致

src/module/test-party/backend/src/service/version.js

module.exports = app => {

  class Version extends app.Service {

    async update(options) {
      ...
    }
    ...
  }

  return Version;
};

引用Service

与EggJS不同之处:EggJS约定了Service的文件位置,在系统启动时自动加载。而EggBornJS的Service需要通过require显式引用,从而便于进行模块编译

src/module/test-party/backend/src/services.js

const version = require('./service/version.js');
const party = require('./service/party.js');

module.exports = app => {
  const services = {
    version,
    party,
  };
  return services;
};

使用Service

EggBornJS的Service只能在模块内部使用

当后端接到前端的访问时,系统自动创建ctx对象,同时将当前模块的所有Service注入到ctx对象中

正是因为这种模块隔离设计,使得我们在大型业务开发过程中,不必担心其他模块是否也存在同名Service

使用举例:

src/module/test-party/backend/src/controller/version.js

async update() {
  await this.service.version.update(this.ctx.request.body);
  this.ctx.success();
}

如果有类似跨模块调用的需求,请参考API路由中的跨模块调用机制