node.js - https.get response ondata 回调触发多次

标签 node.js facebook-graph-api

在使用 Facebook graph api 时,我使用 https.get 来请求 facebook 用户数据。

var optionsP = {
        host: 'graph.facebook.com',     
        path: '/me?access_token=XXXX'
    };

    https.get(optionsP, function(resp) {                                        
        resp.on('data', function(d) {                                   
            console.log('ondata')
            console.log(d.length)
            process.stdout.write(d)
        }); 
    }).on('error', function(e) {
        console.error(e);
});

但是响应数据分为两部分!第一次打印最多 1034 个字符,然后同样的回调将再次工作并打印剩余的 1347 个字符。这些部分响应的原因是什么?

最佳答案

这很正常。 resp 是一个流。它是一个 ClientResponse 对象,实现了可读流接口(interface)。以下是文档:http://nodejs.org/api/http.html#http_http_clientresponse

您可以将输出通过管道传输到接受流的地方,或者将其存储在缓冲区中,直到您收到“结束”事件。

这是一个将数据存储在内存中的 String 中的示例,直到它全部到达:

https.get(optionsP, function(resp) {                                        
    resp.setEncoding(); //Now the data is a string!
    var store = "";
    resp.on('data', function(d) {
        store += d;
    }); 
    resp.on('end', function() {
        console.log("this is all: " + store);
    });
}).on('error', function(e) {
    console.error(e);
});

关于node.js - https.get response ondata 回调触发多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11815621/

相关文章:

ruby - 解析 HTTParty 响应

Facebook 请求工作需要 iPhone App Store ID?

facebook - 填充 facebook 提要对话框消息框

angularjs - Node JS 中的 Angular CryptoJs 加密而不是解密 CryptoJS

javascript - 来自http请求的Node.js响应不调用 'end'事件而不包括 'data'事件

javascript - 偶数应返回大写

node.js - 无法替换到目录/var/lib/docker/overlay2/if2ip5okvavl8u6jpdtpczuog/merged/app/node_modules/@ampproject/remapping with file

c++ - 将 imagemagick blob 保存到 Node 缓冲区

Python facebook-sdk Graph api访问错误

facebook-graph-api - 如何在 facebook iOS SDK 3.1 中发布到 friend 的墙?