节点请求模块 Http.IncomingMessage 未发出事件

Node request module Http.IncomingMessage not emitting events

根据这个link:request - Node

The callback argument gets 3 arguments:

An error when applicable (usually from http.ClientRequest object) An http.IncomingMessage object The third is the response body (String or Buffer, or JSON object if the json option is supplied)

代码:

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(Readable Stream) 有什么意义。

当您传递这样的回调时,request 会为您缓冲整个响应,这就是 body 中可用的内容。因此,这意味着您不会在 res 上看到 data 和此类事件,因为它们已经被 request.

处理了

您似乎在混合使用 'request' 模块的两种不同方式。根据偏好,您可以使用回调方法或流式方法。

回调方法涉及传递函数和选项,当收到所有数据时,它将调用回调函数。

流式方法允许您将侦听器附加到 'response' 等事件。我猜你已经从接收 http 请求和使用节点服务器发送响应的示例中混合了这段代码,因为我在文档中看不到对 'data' 和 'finish' 事件的任何引用对于请求模块。