【问题标题】:How to handle no response of Node.js request module?Node.js请求模块无响应如何处理?
【发布时间】:2016-12-12 11:14:11
【问题描述】:

我想从网站中保存一些资源,这些资源与许多页面分开,所以我必须逐页发送请求。页面超过 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)

大部分尝试都是成功的,但有时程序会停止。没有反应怎么办?有没有办法放弃请求并重试?

【问题讨论】:

  • 您需要处理错误并实现超时。无论哪种方式,您都必须决定重试该页面多少次,还是跳过它继续。

标签: node.js asynchronous request


【解决方案1】:

一方面,当设置了errres.statusCode !== 200 时,您不会调用callback

【讨论】:

    猜你喜欢
    • 2018-01-05
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 2021-12-02
    • 2019-07-20
    • 2021-10-26
    相关资源
    最近更新 更多