0

根据此链接:请求 - 节点

回调参数有 3 个参数:

适用时的错误(通常来自 http.ClientRequest 对象) http.IncomingMessage 对象 第三个是响应正文(字符串或缓冲区,如果提供了 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当我无法流式传输第二个参数时,将其设为 (Readable Stream) 有什么意义。

4

2 回答 2

1

当您传递这样的回调时,会request为您缓冲整个响应,这就是body. 因此,这意味着您不会data在 上看到此类事件res,因为它们已被 处理request

于 2015-10-20T14:56:58.500 回答
0

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

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

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

于 2015-10-20T14:59:19.737 回答