Javascript对象返回未定义的NodeJs

时间:2016-06-06 10:08:59

标签: javascript node.js

我正在尝试使用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\"}"}

那么为什么在第一个示例中将名称作为未定义返回。我究竟做错了什么?请有人解释一下。感谢

3 个答案:

答案 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)

你需要解析身体。为此,您可以使用body-parser模块

https://www.npmjs.com/package/body-parser#examples