根据此链接: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
(可读流)时,第二个参数的重点是什么?流它。
答案 0 :(得分:1)
当你传递这样的回调时,request
会为你缓冲整个回复,这就是body
中可用的回复。因此,这意味着您无法在data
上看到res
和此类事件,因为request
已经处理了这些事件。
答案 1 :(得分:0)
看起来您正在混合两种不同的方式来使用“请求”#39;模块。根据偏好,您可以使用回调方法或流式方法。
回调方法涉及传递函数和选项,当收到所有数据时,它将调用回调函数。
流媒体方法允许您将听众附加到诸如“响应”之类的事件。我猜测你已经从接收http请求和向节点服务器发送响应的示例中混合了这段代码,因为我看不到对数据的任何引用'并且'完成'请求模块的文档中的事件。