2016-06-06 4 views
0

다음 요청을 수행하는 nodejs에서 Graph API를 사용하여 Facebook 사용자 프로필 정보를 얻으려고합니다.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: true 속성을 사용할 수 있습니다. request docs 가입일

request({ 
    url: url, 
    method: 'GET', 
    qs, 
    json: true 
}, function (err, res, body) { 
    var name = body.first_name 
    var message = "Hey there " + name 
}); 

:

JSON은 - 값 JSON 표현 본체를 설정하고, 컨텐츠 타입이 추가 애플리케이션/JSON 헤더. 또한 응답 본문을 JSON으로 구문 분석합니다.

+0

firstlevel'body' 키도 있습니다. 그래서,'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

관련 문제