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

Node request module Http.IncomingMessage not emitting events

本文关键字:出事件 IncomingMessage 请求 模块 Http 节点      更新时间:2023-09-26

根据此链接:请求-节点

callback参数有3个参数:

适用时的错误(通常来自http。对象)http。第三个是响应体(String或缓冲区,如果提供了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(可读流)有什么意义呢?

当您通过这样的回调时,request为您缓冲整个响应,这就是body中可用的。正因为如此,这意味着你不会在res上看到data和这样的事件,因为它们已经被request处理了。

看起来你混合了两种不同的方式来使用'request'模块。根据您的偏好,您可以使用回调方法或流式方法。

回调方法包括传递一个函数和选项,当接收到所有数据时,它将调用回调函数。

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