Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js https.get响应ondata回调多次激发_Node.js_Facebook Graph Api - Fatal编程技术网

Node.js https.get响应ondata回调多次激发

Node.js https.get响应ondata回调多次激发,node.js,facebook-graph-api,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

在使用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对象,实现可读流接口。以下是文件:

您可以通过管道将输出传输到接受流的某个位置,或者将其存储在缓冲区中,直到接收到“end”事件

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

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);
});

谢谢你,罗德瑞。。。根据文档“事件:当接收到消息正文的一部分时,会发出数据”。因此,我们必须添加这些片段以形成完整的消息正文。:)