2016-05-07 5 views
2

私はHTTPリクエスト機能を作ろうとしています。すべての要求は同じドメインの同じディレクトリに移動し、ファイル名のみが異なります。Node.jsのHTTPリクエストが機能していませんか?

コンソールに何も表示されておらず、何も返されません。

function HttpRequest(filename){ 

    var options = { 
     host: "example.com", 
     port: 80, 
     path: "/path/to/file/" + filename, 
     method: "GET", 
    }; 

    var Response = ""; 
    var StatusCode = 0; 

    var req = http.request(options, function(resp){ 
     resp.on('data', function(data){ 
      Response = data; 
      StatusCode = resp.statusCode; 
     }); 
    }); 

    req.on('error',function(e){ 
     console.log("Request to '" + filename + "' failed: " + e.message) 
    }); 

    req.write('data\n'); 
    req.write('data\n'); 
    req.end(); 

    return Response; 
} 
+3

を[?私は非同期呼び出しからの応答を返すにはどうすればよいです](http://stackoverflow.com/questions/14220321/how-do- i-return-from-asynchronous-call) –

+0

サイドノート:[''data''イベント](https://nodejs.org/dist/latest-v6.x/docs/api/ stream.html#stream_event_data)を複数回送信することができ、それぞれが応答の一部のみを与えます。その部分を収集し、[''end''イベント](https://nodejs.org/dist/latest-v6.x/docs/api/stream.html#stream_event_end)を聞いて、いつ知ることができるでしょうかあなたはそれらのすべてを受け取りました。 ([応答がチャンク化されたときに全体のレスポンスボディをゲット?](http://stackoverflow.com/questions/5083914/get-the-whole-response-body-when-the-response-is-chunked)) –

+0

@ JonathanLonowski私はJavaScriptを初めて使っています。申し訳ありませんが、私のコードをすばやく編集して答えが得られると思いますか? – RafDev

答えて

2

http.request機能は本質的に非同期であるため、この問題に実行されている - あなたはそれが返されます見当がつかない、まったく場合。

正しい変数(ただし、あなたがここにスコープの問題に遭遇するかもしれません)に正しい値を代入するコードのこのブロック:

var req = http.request(options, function(resp){ 
     resp.on('data', function(data){ 
      Response = data; 
      StatusCode = resp.statusCode; 
     }); 
    }); 

しかしResponsedataに設定されている場合、あなたはかなり知っていることはありません。 と書くと、ファンクションが終了するとすぐにResponseという値が返されますが、これはHTTPリクエストが完了したことやコールバックが実行されたことを意味するものではありません。

@Jonathan Lonowskiがコメントで述べたように、このanswerは問題を解決する方法です。

基本的に、関数にパラメータとして提供するコールバックを使用する必要があります。その後

function HttpRequest(filename, callback){ 

    var options = { 
     host: "example.com", 
     port: 80, 
     path: "/path/to/file/" + filename, 
     method: "GET", 
    }; 

    var req = http.request(options, function(resp){ 
     resp.on('data', callback); 
    }); 

    req.on('error',function(e){ 
     console.log("Request to '" + filename + "' failed: " + e.message) 
    }); 

    req.write('data\n'); 
    req.write('data\n'); 
    req.end(); 
} 

、あなたの関数を呼び出すとき:

HttpRequest("myfile", function(data) { 
    console.log(data); 
}); 
関連する問題