0

このリンクによると:リクエスト - ノード

コールバック引数は 3 つの引数を取得します。

該当する場合はエラー (通常は http.ClientRequest オブジェクトから) http.IncomingMessage オブジェクト 3 番目は応答本文 (文字列またはバッファー、または json オプションが指定されている場合は JSON オブジェクト)

コード:

var r = require("request");

var options= {
    url: "http://www.example.com/" 
};

var callback = function (err, res, body) {
    if (!err && res.statusCode == 200) {
        res.on("data", function(chunk) {
            console.log("DATA : "+chunk);
        });
        res.on("finish", function() {
            console.log("FINISHED");
        });
        console.log(body);
    }
};

r(options, callback);

しかし、上記のコードではconsole.log(body)動作するだけで、イベント エミッターは動作しません。

また、応答全体が利用可能な場合にのみコールバックが呼び出される場合、http.IncomingMessageストリーミングできないときに2番目の引数を (Readable Stream) にするポイントは何ですか。

4

2 に答える 2

1

そのようなコールバックを渡すrequestと、 は応答全体をバッファします。これが で利用できるものですbodydataこのため、 でそのようなイベントが表示されないことを意味します。これらのイベントresは によって既に処理されているためrequestです。

于 2015-10-20T14:56:58.500 に答える
0

「リクエスト」モジュールを使用する 2 つの異なる方法を混在させているようです。好みに応じて、コールバック アプローチまたはストリーミング アプローチのいずれかを使用できます。

コールバック アプローチでは、関数とオプションを渡す必要があり、すべてのデータが受信されると、コールバック関数が呼び出されます。

ストリーミング アプローチでは、「応答」などのイベントにリスナーをアタッチできます。リクエストモジュールのドキュメントで「データ」イベントと「終了」イベントへの参照が見られないため、httpリクエストを受信して​​ノードサーバーで応答を送信する例からこのコードを混ぜたと思います.

于 2015-10-20T14:59:19.737 に答える