2016-06-13 3 views
1

私はNode.jsを使用してWebスクレーパーを設定しており、URLからいくつかのHTMLを取得して変数として保存したいと考えています。削除されたバージョンが続きます。Node.jsは変数としてhtmlを返します

var request = require('request'); 
var get_html = function(){ 
    var url = "http://www.google.com"; 
    var html = ''; 
    request.get(url,function(error, response, body){ 
     html += body; 
    }); 
    return html; 
}; 
console.log(get_html()); 

関数が変数htmlにHTMLを連結することができます要求の前に返すようです。私が見る限り、要求はコールバック関数内のhtmlを操作するか、ファイルにパイプすることしかできません。とにかくそれを変数として返すだけですか?

答えて

1

request.getは非同期で、結果をコールバック関数に返します。関数コールバックの多くは美しくないに見えると

あなたは少しこの

var request = require('request'); 

// get_html receive callback to process result 
var get_html = function(callback) { 
    var url = "http://www.google.com"; 
    var html = ''; 
    request.get(url,function(error, response, body){ 
     return callback(body); // call callback and parse result to it 
    }); 
}; 

// call get_html function 
// and log html result here 
get_html(function (body) { console.log(body); }); 

コードのようにコードを適応させる必要があります。 私はコールバックより約束が好きです。 promiseを使いたい場合は、 'request-promise' libを試してみてください。

+1

実際にHTMLを文字列として返す方法はないように見えますが、残りのコードをコールバックとして要求に渡すだけです。私は、この小さな関数を別のモジュールから呼び出せるユーティリティとして使うことを意味します。これはすぐに扱いにくくなるようです。 – mentoc3000

0

request.getは非同期なので、return html;をコールバックに入れる必要があります。それ以外の場合、request.getが実行を終了する前に即座に戻ります。

関連する問題