我想从网站上保存一些资源,资源是用很多页面分隔的,所以我必须逐页发送请求。页面超过1000+,我使用async.eachSeries
来获得稳定的流量。但有时,请求模块不会发送响应,因此程序会在运行时停止。
以下是代码,
var pages = [1, 2, 3, 4, 5, 6, .... , 200];
async.eachSeries(pages, function (page, callback) {
getData(page, function(){
console.log('Data saved . page : ' + page);
callback();
});
}, function () {
console.log('All done !');
});
function getData(page, callback) {
//request data
var url = "http://finance.naver.com/item/frgn.nhn?code=191420&page="+page;
request(url, function (err, res, html) {
if (!err && res.statusCode == 200) {
var $ = cheerio.load(html);
var data = $.html();
// save to mongoDB
new Data({
data: data,
}).save(function (err, result) {
if (err) console.log('Error !');
// callback here, to async.eachSeries() knows;
callback();
});
}
})
}
控制台
Data saved. page : 1
Data saved. page : 2
Data saved. page : 3
Data saved. page : 4
Data saved. page : 5
Data saved. page : 6 (stopped here with no progress, sometimes)
大多数尝试都是成功的,但有时程序已停止。如果没有回复,我该如何处理?有办法放弃请求并再试一次吗?
答案 0 :(得分:1)
首先,当callback
设置为err
或res.statusCode !== 200
时,您无法呼叫{"success":true,"message":"Thanks for saying hello. Everything looks good so far."}
。