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

本文为我的学习整理所得,但愿对读者有所帮助。javascript

概念 - 服务(Service)

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

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

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

使用场景node

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

使用 Service

下面咱们经过一个完整的例子,看看怎么使用 Service。git

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

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是必须的,不然调用时会出现空对象状况。app

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

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

一块儿作项目

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

PS:所有的代码仓库:github.com/hejian1993/…,暂时没有分章节,仅供参考。

我是河粉,咱们下一节见

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

相关文章
相关标签/搜索