Egg 中獲取遠程的數據

Egg 提供了 this.ctx.curl 方法獲取遠程的數據,讓我們可以輕鬆的實現一個簡單的爬蟲功能,以下是一個使用的具體示例。

首先在config文件夾下的 config.default.js 中定義要獲取數據的域名。

'use strict';

module.exports = appInfo => {
    const config = exports = {};

    // use for cookie sign key, should change to your own and keep security
    config.keys = appInfo.name + '_1532656413112_8161';

    // add your config here
    config.middleware = [];

    // 配置公共的請求域名
    config.api = 'http://www.phonegap100.com/';

    return config;
};

然後在service文件夾下添加服務的文件news.js,並在文件中添加服務的方法getNewsList和getNewsContent,分別獲取新聞列表與新聞詳情。

'use strict';

const Service = require('egg').Service;

class NewsService extends Service {
    // 獲取新聞列表
    async getNewsList() {
        var api = this.config.api + 'appapi.php?a=getPortalList&catid=20&page=1'
        // curl的方法獲取遠程的數據
        var response = await this.ctx.curl(api);
        // 把返回的Buffer類型轉轉換成對象
        var data = JSON.parse(response.data);   
        return data.result;
    }
    //  獲取新聞詳情(控制器中調用時要傳參)
    async getNewsContent(aid) {
        var api = this.config.api + 'appapi.php?a=getPortalArticle&aid=' + aid;
        // curl的方法獲取遠程的數據
        var response = await this.ctx.curl(api);
        // 把Buffer類型轉轉換成對象
        var data = JSON.parse(response.data);    
        return data.result;
    }
}

module.exports = NewsService;

通過以上的操作,就可以在控制器中調用服務的方法,將數據返回給前臺或是渲染到模板文件上面了。

 

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