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