Probleme mit anderen Antworten:
- unsicher
JSON.parse
- Keine Überprüfung des Antwortcodes
Alle Antworten hier werden JSON.parse()auf unsichere Weise verwendet . Sie sollten immer alle Aufrufe JSON.parse()in einen try/catchBlock einfügen, insbesondere wenn Sie JSON analysieren, das von einer externen Quelle stammt, wie Sie es hier tun.
Sie können requestden JSON automatisch analysieren, was hier in anderen Antworten nicht erwähnt wurde. Es gibt bereits eine Antwort mit dem requestModul, aber es wird verwendet JSON.parse(), um JSON manuell zu analysieren. Dies sollte immer innerhalb eines try {} catch {}Blocks ausgeführt werden, um Fehler mit falschem JSON zu behandeln, da sonst die gesamte App abstürzt. Und falsches JSON passiert, vertrau mir.
Andere Antworten, die verwendet werden, werden httpebenfalls verwendet, JSON.parse()ohne nach Ausnahmen zu suchen, die auftreten und Ihre Anwendung zum Absturz bringen können.
Im Folgenden werde ich einige Möglichkeiten zeigen, wie Sie sicher damit umgehen können.
Alle Beispiele verwenden eine öffentliche GitHub-API, damit jeder diesen Code sicher ausprobieren kann.
Beispiel mit request
Hier ist ein Arbeitsbeispiel, mit requestdem JSON automatisch analysiert wird:
'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 {
console.log(data.html_url);
}
});
Beispiel mit httpundtry/catch
Dies verwendet https- ändern Sie einfach httpszu, httpwenn Sie HTTP-Verbindungen möchten:
'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);
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);
});
Beispiel mit httpundtryjson
Dieses Beispiel ähnelt dem obigen, verwendet jedoch das tryjsonModul. (Haftungsausschluss: Ich bin der Autor dieses Moduls.)
'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);
});
Zusammenfassung
Das verwendete Beispiel requestist das einfachste. Wenn Sie es jedoch aus irgendeinem Grund nicht verwenden möchten, denken Sie daran, immer den Antwortcode zu überprüfen und JSON sicher zu analysieren.