我正在尝试使用nodejs中的Graph API获取Facebook用户个人资料信息,我正在提出以下请求。
var url = 'https://graph.facebook.com/v2.6/' + id
var qs = {fields:'first_name,last_name',access_token:token}
request({
url: url,
method: 'GET',
qs
}, function(err, response, body){
var name = body.first_name
var message = "Hey there " + name
})
}
来自服务器的请求响应如下所示
{
"first_name": "Peter",
"last_name": "Chang"
}
但是,该名称将返回为undefined。但是,如果我这样打电话。
var url = 'https://graph.facebook.com/v2.6/' + id
var qs = {fields:'first_name,last_name',access_token:token}
request({
url: url,
method: 'GET',
qs
}, function(err, response, body){
var name = body
name = JSON.jsonstringify(body)
var message = "Hey there " + name
})
}
它提供了这样的输出,
Hey there {"statusCode":200,"body":"{\"first_name\":\"Peter\",\"last_name\":\"Chang\"}"}
那么为什么在第一个示例中将名称作为未定义返回。我究竟做错了什么?请有人解释一下。感谢
答案 0 :(得分:1)
我会说这是因为没有解析响应,因此是一个字符串。您使用的是节点http
模块吗?
var url = 'https://graph.facebook.com/v2.6/' + id
var qs = {fields:'first_name,last_name',access_token:token}
request({
url: url,
method: 'GET',
qs
}, function(err, response, body){
var data = JSON.parse(body);
var name = data.first_name
var message = "Hey there " + name
});
答案 1 :(得分:1)
我相信您必须告诉您处理JSON响应的请求。您可以在请求中使用json: true
属性。
request({
url: url,
method: 'GET',
qs,
json: true
}, function (err, res, body) {
var name = body.first_name
var message = "Hey there " + name
});
来自request docs:
json - 将body设置为值的JSON表示,并添加Content-type:application / json标头。另外,将响应主体解析为JSON。
答案 2 :(得分:0)