节点请求模块Http.IncomingMessage没有发出事件
Node request module Http.IncomingMessage not emitting events
根据此链接:请求-节点
代码: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'事件的引用。
相关文章:
- 点击启动弹出事件未显示
- 如何在Ol3弹出窗口中添加用javascript创建的按钮上的点击事件
- 单击事件打开两个弹出菜单
- 如何准确地找出引发事件的原因
- 我可以在FullCalendar中设置事件ClickLimit弹出窗口的样式吗
- 信息窗口谷歌地图点击事件给出错误
- 从父级触发弹出窗口中的事件
- D3.js:如何在svg上移动鼠标时创建弹出事件
- 停止事件以在DOM中弹出
- 萨特利泽关闭弹出事件
- 如何使用流的排出事件.在节点.js中可写
- 如何在高图表中查找鼠标出事件的系列名称
- jQuery列表中每个产品的基于悬停的弹出事件
- 无法抛出事件
- 鼠标悬停和鼠标移出事件是否不匹配?
- 谷歌地图折线滑出事件
- 鼠标悬停/出事件时奇怪的动画行为
- JavaScript对话框弹出事件等待OK被按下
- JQuery的可拉出事件不触发,有时可拖动与光标
- 弹出事件处理程序