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

时间:2015-10-20 14:38:04

标签: javascript node.js node-request

根据此链接:request - Node

  

回调参数有3个参数:

     

适用时出错(通常来自http.ClientRequest对象)   http.IncomingMessage对象第三个是响应主体(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(可读流)时,第二个参数的重点是什么?流它。

2 个答案:

答案 0 :(得分:1)

当你传递这样的回调时,request会为你缓冲整个回复,这就是body中可用的回复。因此,这意味着您无法在data上看到res和此类事件,因为request已经处理了这些事件。

答案 1 :(得分:0)

看起来您正在混合两种不同的方式来使用“请求”#39;模块。根据偏好,您可以使用回调方法或流式方法。

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

流媒体方法允许您将听众附加到诸如“响应”之类的事件。我猜测你已经从接收http请求和向节点服务器发送响应的示例中混合了这段代码,因为我看不到对数据的任何引用'并且'完成'请求模块的文档中的事件。