Problèmes avec les autres réponses :
- non sécurisé
JSON.parse
- vérification du code de non-réponse
Toutes les réponses ici utilisent JSON.parse()
dans un manière dangereuse . Vous devez toujours mettre tous les appels à JSON.parse()
dans un try/catch
bloc notamment lorsque vous analysez le JSON provenant d'une source externe, comme vous le faites ici.
Vous pouvez utiliser request
pour analyser le JSON automatiquement, ce qui n'a pas été mentionné dans les autres réponses. Il existe déjà une réponse utilisant request
mais il utilise JSON.parse()
pour analyser manuellement le JSON - ce qui devrait siempre être exécuté à l'intérieur d'un try {} catch {}
pour gérer les erreurs de JSON incorrect, sinon l'application entière se plantera. Et un JSON incorrect, ça arrive, croyez-moi.
Autres réponses qui utilisent http
utiliser également JSON.parse()
sans vérifier les exceptions qui peuvent se produire et faire planter votre application.
Je vais vous montrer ci-dessous quelques façons de le faire en toute sécurité.
Tous les exemples utilisent une API GitHub publique afin que chacun puisse essayer ce code en toute sécurité.
Exemple avec request
Voici un exemple fonctionnel avec request
qui analyse automatiquement le 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);
}
});
Exemple avec http
y try/catch
Cela utilise https
- juste changer https
à http
si vous voulez des connexions 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);
});
Exemple avec http
y tryjson
Cet exemple est similaire au précédent, mais utilise l'option tryjson
module. (Avertissement : je suis l'auteur de ce module).
'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);
});
Résumé
L'exemple qui utilise request
est le plus simple. Mais si, pour une raison quelconque, vous ne souhaitez pas l'utiliser, n'oubliez pas de toujours vérifier le code de réponse et d'analyser JSON en toute sécurité.