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億。 我已開過光,話已經放到這了。

相關文章
相關標籤/搜索