Egg 中service定義與調用規則

Egg是一個標準的MVC框架,其中service就代表model層,專門用於和數據打交道,本篇將講解如何在egg中定義service並在controller中調用,以及service的一些相關規則。

1. 使用方法

首先在service文件夾下定義服務文件news.js,並在文件中添加方法getNewsList。

'use strict';
const Service = require('egg').Service;
class NewsService extends Service {
    async getNewsList() {
        // 獲取新聞數據,此處爲模擬數據,實際項目應從數據庫獲取數據
        var list = ['新聞一', '新聞二', '新聞三'];
        return list;
    }
}
module.exports = NewsService;

然後在控制器中就可以使用定義的服務了。

'use strict';
const Controller = require('egg').Controller;
class NewsController extends Controller {
    async index() {
        var msg = '今日要聞';
        // 通過調用服務從數據庫獲取數據
        // service對應文件夾,news對應文件,getNewsList對應方法
        var list = await this.service.news.getNewsList();
        // 渲染news模板引擎,傳入msg與list數據
        await this.ctx.render('news', {
            msg: msg,
            list: list
        });
    }
}
module.exports = NewsController;

 

2. 服務的調用規則及可調用方法

服務既可以被控制器調用也可以被服務調用,控制器既不可以被控制器調用也不可以被服務調用。

服務繼承於Service,爲了方便 ,egg 在 this上面綁定了以下方法,可以在服務中調用。

1. this.ctx:當前請求的上下文 Context 對象的實例,通過它我們可以拿到框架封裝好的處理當前請求的各種便捷屬性和方法。

2. this.app:當前應用 Application 對象的實例,通過它我們可以拿到框架提供的全局對象和方法。

3. this.service:應用定義的 Service,通過它我們可以訪問到其他業務層,等價於 this.ctx.service。

4. this.config:應用運行時的配置項。

5. this.logger:logger 對象,上面有四個方法(debug,info,warn,error),分別代表打印四個不同級別的日誌,通過這個 logger 對象記錄的日誌,在日誌前面會加上打印該日誌的文件路徑,以便快速定位日誌打印位置。

下面是調用實例:

'use strict';
const Service = require('egg').Service;
class NewsService extends Service {
    async getNewsList() {
        // 獲取新聞數據,此處爲模擬數據,實際項目應從數據庫獲取數據
        var list = ['新聞一', '新聞二', '新聞三'];
        // 獲取config配置數據
        var api = this.config.api;
        // 獲取其它服務的數據
        var user = await this.service.user.getUserInfo();
        
        var obj = {
            api: api,
            list: list,
            user: user
        }
        return obj;
    }
}
module.exports = NewsService;

 

3.服務的命名

Service 文件必須放在 app/service 目錄,可以支持多級目錄,訪問的時候可以通過目錄名級聯訪問。

由於文件命名的方式不同,調用服務時需要遵循以下規則:

1. 小寫與小駝峯直接調用,推薦使用。

app/service/biz/user.js => ctx.service.biz.user 

2. 下劃線轉小駝峯。

app/service/sync_user.js => ctx.service.syncUser

3.大駝峯轉小駝峯。

app/service/SyncUser.js => ctx.service.syncUser

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章