我试图让登录到我的应用程序的用户的Facebook的个人资料图片。 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()
在一个try/catch
块尤其是当你解析JSON从外部源的到来,就像你在这里做。
您可以使用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
模块 。 你需要与故宫安装( 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)
}
})
我使用GET JSON的使用非常简单:
$ npm install get-json --save
进口get-json
var getJSON = require('get-json')
做一个GET
请求,你会做这样的事情:
getJSON('http://api.listenparadise.org', function(error, response){
console.log(response);
})
Unirest库简化了这个有很多。 如果你想使用它,你必须安装unirest
NPM包。 然后,你的代码看起来是这样的:
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)
}
})