https.get响应ondata回调多次触发

时间:2012-08-05 10:17:50

标签: node.js facebook-graph-api

在使用Facebook图形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个字符。这些部分回应的原因是什么?

1 个答案:

答案 0 :(得分:8)

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

您可以将输出传输到接受流的位置,也可以将其存储在缓冲区中,直到您收到'end'事件。

这是一个将数据存储在内存中的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);
});