NodeJs http.get方法は時間が長すぎる問題を要求して処理します.

1850 ワード

NodeJsはウェブページの内容http.getのデフォルトの要求を取得してタイムアウトしすぎて、プログラムはカードでしばらく死んでしまいます.
インターネットの資料によって、タイムアウト設定のあるウェブページのコンテンツ取得方法を改造しました.
主な方法はsetTimeoutを使用してタイムアウトします.
コードは以下の通りです
//       ,  HTML
function getUrlHtml(url, fn_success, fn_error, timeout)
{
    timeout = timeout || 2000;
    var timeEvent;
    var req = http.get(url, function(res){
        var html = '';
        res.setEncoding('utf-8');
        res.on('data' , function(d){
            window.clearTimeout(timeEvent);
            html += d; 
        }).on('end', function(){
            window.clearTimeout(timeEvent);
            //var dom = jq(html);
            return fn_success(html);
        }).on('error', function(err){
            window.clearTimeout(timeEvent);
            fn_error(err);
        });
    }).on('error', function(err){
        window.clearTimeout(timeEvent);
        fn_error(err);
    });
    
    timeEvent = window.setTimeout(function(){
        fn_error('time out!');
        req.abort();
    }, timeout);
}

//   
getUrlHtml('http://www.xxx.com', function(html){
    console.log(html);
}, function(err){
    console.log(err);
}, 1000);