Node.js로 JSON API 호출
내 애플리케이션에 로그인 한 사용자의 페이스 북 프로필 사진을 가져 오려고합니다. Facebook의 API http://graph.facebook.com/517267866/?fields=picture
는 올바른 URL을 JSON 개체로 반환 한다고 설명 합니다.
내 코드에서 그림의 URL을 가져오고 싶습니다. 다음을 시도했지만 여기에 뭔가가 누락되었습니다.
var url = 'http://graph.facebook.com/517267866/?fields=picture';
http.get(url, function(res) {
var fbResponse = JSON.parse(res)
console.log("Got response: " + fbResponse.picture);
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
이 코드를 실행하면 다음과 같은 결과가 나타납니다.
undefined:1
^
SyntaxError: Unexpected token o
at Object.parse (native)
콜백 의 res
인수 http.get()
는 본문이 아니라 http.ClientResponse 객체입니다. 본체를 조립해야합니다.
var url = 'http://graph.facebook.com/517267866/?fields=picture';
http.get(url, function(res){
var body = '';
res.on('data', function(chunk){
body += chunk;
});
res.on('end', function(){
var fbResponse = JSON.parse(body);
console.log("Got a response: ", fbResponse.picture);
});
}).on('error', function(e){
console.log("Got an error: ", e);
});
다른 답변의 문제 :
- 위험한
JSON.parse
- 응답 코드 검사 없음
여기에있는 모든 답변 JSON.parse()
은 안전하지 않은 방식으로 사용 됩니다 . 특히 여기 에서처럼 외부 소스에서 오는 JSON을 구문 분석 할 때 항상 모든 호출을 블록 JSON.parse()
에 넣어야합니다 .try/catch
request
다른 답변에서 여기에 언급되지 않은 JSON을 자동으로 구문 분석하는 데 사용할 수 있습니다 . request
모듈을 사용하는 답변이 이미 있지만 JSON.parse()
JSON을 수동으로 구문 분석 하는 데 사용 합니다. 이는 항상try {} catch {}
잘못된 JSON의 오류를 처리하기 위해 블록 내에서 실행 되어야합니다. 그렇지 않으면 전체 앱이 충돌합니다. 그리고 잘못된 JSON이 발생합니다. 저를 믿으십시오.
사용하는 다른 답변 은 발생할 수있는 예외를 확인하지 않고 http
사용 JSON.parse()
하여 응용 프로그램을 충돌시킵니다.
아래에서 안전하게 처리하는 몇 가지 방법을 보여 드리겠습니다.
모든 예제는 공용 GitHub API를 사용하므로 누구나 안전하게 해당 코드를 시도 할 수 있습니다.
예제 request
다음은 request
JSON을 자동으로 구문 분석 하는 작업 예제입니다 .
'use strict';
var request = require('request');
var url = 'https://api.github.com/users/rsp';
request.get({
url: url,
json: true,
headers: {'User-Agent': 'request'}
}, (err, res, data) => {
if (err) {
console.log('Error:', err);
} else if (res.statusCode !== 200) {
console.log('Status:', res.statusCode);
} else {
// data is already parsed as JSON:
console.log(data.html_url);
}
});
http
및 예제try/catch
이 용도는 https
- 단지 변경 https
에 http
당신이 HTTP 연결을 원하는 경우 :
'use strict';
var https = require('https');
var options = {
host: 'api.github.com',
path: '/users/rsp',
headers: {'User-Agent': 'request'}
};
https.get(options, function (res) {
var json = '';
res.on('data', function (chunk) {
json += chunk;
});
res.on('end', function () {
if (res.statusCode === 200) {
try {
var data = JSON.parse(json);
// data is available here:
console.log(data.html_url);
} catch (e) {
console.log('Error parsing JSON!');
}
} else {
console.log('Status:', res.statusCode);
}
});
}).on('error', function (err) {
console.log('Error:', err);
});
http
및 예제tryjson
이 예제는 위와 비슷하지만 tryjson
모듈을 사용합니다 . (면책 조항 : 저는 해당 모듈의 작성자입니다.)
'use strict';
var https = require('https');
var tryjson = require('tryjson');
var options = {
host: 'api.github.com',
path: '/users/rsp',
headers: {'User-Agent': 'request'}
};
https.get(options, function (res) {
var json = '';
res.on('data', function (chunk) {
json += chunk;
});
res.on('end', function () {
if (res.statusCode === 200) {
var data = tryjson.parse(json);
console.log(data ? data.html_url : 'Error parsing JSON!');
} else {
console.log('Status:', res.statusCode);
}
});
}).on('error', function (err) {
console.log('Error:', err);
});
요약
사용하는 예가 request
가장 간단합니다. 그러나 어떤 이유로 사용하고 싶지 않다면 항상 응답 코드를 확인하고 JSON을 안전하게 구문 분석해야합니다.
이와 같은 간단한 HTTP 요청의 경우 request
module 을 사용하는 것이 좋습니다 . npm ( npm install request
) 을 사용하여 설치해야하며 코드는 다음과 같습니다.
const request = require('request')
,url = 'http://graph.facebook.com/517267866/?fields=picture'
request(url, (error, response, body)=> {
if (!error && response.statusCode === 200) {
const fbResponse = JSON.parse(body)
console.log("Got a response: ", fbResponse.picture)
} else {
console.log("Got an error: ", error, ", status code: ", response.statusCode)
}
})
I'm using get-json very simple to use:
$ npm install get-json --save
Import get-json
var getJSON = require('get-json')
To do a GET
request you would do something like:
getJSON('http://api.listenparadise.org', function(error, response){
console.log(response);
})
Unirest library simplifies this a lot. If you want to use it, you have to install unirest
npm package. Then your code could look like this:
unirest.get("http://graph.facebook.com/517267866/?fields=picture")
.send()
.end(response=> {
if (response.ok) {
console.log("Got a response: ", response.body.picture)
} else {
console.log("Got an error: ", response.error)
}
})
참고URL : https://stackoverflow.com/questions/11826384/calling-a-json-api-with-node-js
'code' 카테고리의 다른 글
자바 스크립트에서 날짜가 주말인지 확인하는 방법 (0) | 2020.11.03 |
---|---|
모든 Android 브로드 캐스트 인 텐트 목록은 어디에 있습니까? (0) | 2020.11.03 |
신속하게 NSUserdefaults에서 배열 배열을 저장하고 읽는 방법은 무엇입니까? (0) | 2020.11.03 |
iOS Swift에서 이미지에 텍스트를 어떻게 추가합니까? (0) | 2020.11.03 |
Dispatcher.Invoke를 사용하여 주 스레드가 아닌 스레드에서 WPF 컨트롤 변경 (0) | 2020.11.03 |