2016-06-06 5 views
0

Я пытаюсь получить информацию о профиле пользователя в Facebook, используя API-интерфейс Graph в nodejs, где я делаю следующий запрос.Объект Javascript возвращает undefined NodeJs

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" 
} 

Однако имя возвращается как определено. Но если я позвоню так.

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\"}"} 

Так почему же имя возвращается как определено в первом примере. Что я делаю не так? Пожалуйста, объясните кому-нибудь. Спасибо

ответ

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 - устанавливает тело JSON представление значения и добавляет Content-Type: приложение/заголовок JSon. Кроме того, анализирует тело ответа как JSON.

+0

Существует также клавиша «body» firstlevel. Итак, 'name = body.body.first_name' –

+0

Если ответ сервера включает только first_name/last_name, то я думаю, что body.first_name будет в порядке. Причина в том, что тело body.body - это потому, что запрос просто возвращает полный ответ в переменной body (следовательно, код состояния и т. Д.), – MrWillihog

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

Да, вы в порядке. Спасибо, что дали мне знать. Это была моя ошибка. Ваш ответ работает. Но я думаю, что ответ @mrwillihog более эффективен. Поэтому я буду принимать это как правильный ответ :) – rksh

Смежные вопросы