Node - Egg.js 框架从入门到放弃系列(4)- 服务(service)

本文为个人学习整理所得,希望对读者有所帮助。

概念 - 服务(Service)

以下概念引用egg.js官方示例

简单来说,Service 就是在复杂业务场景下用于做业务逻辑封装的一个抽象层,提供这个抽象有以下几个好处:

  • 保持 Controller 中的逻辑更加简洁。
  • 保持业务逻辑的独立性,抽象出来的 Service 可以被多个 Controller 重复调用。
  • 将逻辑和展现分离,更容易编写测试用例,测试用例的编写具体可以查看这里。

使用场景

  • 复杂数据的处理,比如要展现的信息需要从数据库获取,还要经过一定的规则计算,才能返回用户显示。或者计算完成后,更新到数据库。
  • 第三方服务的调用,比如 GitHub 信息获取等。

使用 Service

下面我们通过一个完整的例子,看看怎么使用 Service。

app文件夹中创建servie文件夹,并新建good.js(原则上service层与controller层的文件名对应)。

const Service = require('egg').Service;
class GoodsService extends Service {
  async index() {
    return {
      id: 789,
      name: 'test_hefen',
    }
  }
}
module.exports = GoodsService;

要注意的是GoodsService要以首字母大写的驼峰命名,否则调用时会报错。

回到app/controller/good.js中,我们对index方法进行一定的修改

async index() {
    const { ctx } = this;
    const res = await ctx.service.goods.index();
    ctx.body = res;
}

要注意的是await是必须的,否则调用时会出现空对象情况。

浏览器输入http://localhost:7001/goods,就可以看到调用结果啦


抽象出来的 Service 可以被多个 Controller 重复调用,因此别个controller也可以调用goods这个服务,这里就不重复叙述了

一起做项目

估计要Pass几章节才会有实践项目,这里就当作是唠叨吧

PS:代码仓库https://github.com/hejian1993/node_egg

我是河粉,我们下一节见

三个月前,一个人关注了我,他娶了一个如花似玉的老婆。
一周前,一个人关注了我,他中了888亿。
今年,关注了我的人都娶了如花似玉的老婆结婚那天还中888亿。
我已开过光,话已经放到这了。

你可能感兴趣的:(Node,-,Egg.js,框架从入门到放弃系列)