我正在编写一个 Express.js 应用程序,使用 X 射线作为刮刀来获取一些信息。
我想为我正在抓取的每个网站创建一个模型(不同的网站 = 不同的数据/要抓取的程序)。这是模块的代码:
module.exports.getData = function(title){
var Xray = require('x-ray');
var x = Xray();
var url = "http://www.mywebsite.it/online/search?text="+title;
var scraped = '';
x(url, '.listing-products.listing-rows.clearfix h2.title',
[{
title: 'a',
link: 'a@href'
}]
)(function (err, obj) {
for (var i = obj.length - 1; i >= 0; i--) {
scraped += obj[i]['title'] + " "; //we get just the title of the links for now
};
sendScraped(scraped);
});
}
问题是控制器的函数 getData 没有返回任何内容,因为它被调用并且执行继续进行而不等待 x() 抓取函数的完成。
我正在尝试实现一个回调函数 sendScraped(scraped) 来让我的控制器等待完成,但我不知道如何从模型中调用它。这是我在控制器中尝试的:
var mywebsite = require('../models/mywebsite')
exports.searchTitle = function(req, res) {
mywebsite.getData(req.params.title);
};
global.sendScraped = function endScraping(data) {
return res.send(data);
}