节点请求模块 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' 事件的任何引用对于请求模块。
根据这个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' 事件的任何引用对于请求模块。