2

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

4

1 回答 1

8

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

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

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

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);
});
于 2012-08-05T11:35:32.920 回答