2016-06-08 49 views
-2

我提出的API请求使用该给Facebook:HTTPS的NodeJS不能正常工作

var hash = crypto.createHmac('sha256', config.FACEBOOK_SECRET).update(access_token).digest('hex'); 
    console.log('hash = ' + hash); 
var options = { //start of options 
    hostname: 'graph.facebook.com', 
    port: 443, 
    //path: '/oauth/?appsecret_proof='+hash+'&access_token='+at, 
    path: '/v2.6/me?fields=id,email,name&access_token=' + req.body.access_token + '&appsecret_proof=' + hash, 
    method: 'GET' 
}; //end of options 



var fbResponse = []; 

var req = https.request(options, (response) => { 
     console.log('statusCode: ', response.statusCode); 
     console.log('headers: ', response.headers); 

     response.on('data', (d) => { 
      console.log(d) 
     fbResponse.push(d); 
     }); 

     response.on('end',() => { 
     console.log('No more data in response. '); 

     res.send(JSON.stringify({ 
      r: fbResponse 
     })); 
     return; 

     }) 
    }); 


    req.on('error', (e) => { 
     console.error(e); 
     res.status(500).send(JSON.stringify({ 
      r: 'error' 
     })); 
     return; 
    }); 


req.end(); 

这回像这样的回应:

{"id":"123456","email":"bob\u0040gmail.com","name":"bobby bobski"} 

注意如何电子邮件没有'@'符号代替它有\ u0040。我不想要这个,我想用@代替。我不确定,因为我没有测试过,但我认为这可能会与所有特殊字符发生。我如何做到这一点,所以我得到了真正的人物?

+0

你能用卷曲测试吗? –

+0

'\ u0040'和'@'符号是json的同义词 –

+0

btw,修复帖子标题。正如我们可以看到https正常工作,否则你根本得不到任何回应 –

回答

-1

我找到了答案。你需要解析这个响应然后进行串联化。它会工作。

console.log('This will now have the @ and not the unicode : ' + JSON.stringify(JSON.parse(fbResponse))); 
+0

你会接受你自己的答案,还是删除这个问题? –

+0

我会接受我的答案,因为它可能会在未来帮助其他人。 – user2924127

+0

很高兴知道为什么在答案和问题上倒下了吗? – user2924127