如何处理Node.js请求模块没有响应?

时间:2016-08-06 00:21:42

标签: node.js asynchronous request

我想从网站上保存一些资源,资源是用很多页面分隔的,所以我必须逐页发送请求。页面超过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)

大多数尝试都是成功的,但有时程序已停止。如果没有回复,我该如何处理?有办法放弃请求并再试一次吗?

1 个答案:

答案 0 :(得分:1)

首先,当callback设置为errres.statusCode !== 200时,您无法呼叫{"success":true,"message":"Thanks for saying hello. Everything looks good so far."}