Ich versuche, das Facebook-Profilbild des in meiner Anwendung angemeldeten Benutzers abzurufen. Die Facebook-API gibt an, dass http://graph.facebook.com/517267866/?fields=picture
die richtige URL als JSON-Objekt zurückgegeben wird.
Ich möchte die URL zum Bild aus meinem Code entfernen. Ich habe folgendes versucht, aber hier fehlt mir etwas.
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);
});
Das Ausführen dieses Codes führt zu folgenden Ergebnissen:
undefined:1
^
SyntaxError: Unexpected token o
at Object.parse (native)
javascript
json
node.js
http
Sven
quelle
quelle
JSON.parse()
löst Ausnahmen bei ungültigem JSON aus und sollte immer innerhalb einestry/catch
Blocks aufgerufen werden, da sonst das gesamte Programm bei ungültigen Daten abstürzen kann (was manchmal vorkommt).try/catch
for ausführen müssenJSON.parse
(was immer getan werden sollte, wenn Sie verwendenJSON.parse
- siehe diese Antwort ), können Sie ein solches Modul verwendenrequest
, das JSON automatisch für Sie analysiert, wie ich in meiner Antwort unten gezeigt habe.Probleme mit anderen Antworten:
JSON.parse
Alle Antworten hier werden
JSON.parse()
auf unsichere Weise verwendet . Sie sollten immer alle AufrufeJSON.parse()
in einentry/catch
Block einfügen, insbesondere wenn Sie JSON analysieren, das von einer externen Quelle stammt, wie Sie es hier tun.Sie können
request
den JSON automatisch analysieren, was hier in anderen Antworten nicht erwähnt wurde. Es gibt bereits eine Antwort mit demrequest
Modul, aber es wird verwendetJSON.parse()
, um JSON manuell zu analysieren. Dies sollte immer innerhalb einestry {} 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
http
ebenfalls 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
request
dem 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 { // data is already parsed as JSON: console.log(data.html_url); } });
Beispiel mit
http
undtry/catch
Dies verwendet
https
- ändern Sie einfachhttps
zu,http
wenn 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); // 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); });
Beispiel mit
http
undtryjson
Dieses Beispiel ähnelt dem obigen, verwendet jedoch das
tryjson
Modul. (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
request
ist 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.quelle
Ich denke, dass es für einfache HTTP-Anfragen wie diese besser ist, das
request
Modul zu verwenden . Sie müssen es mit npm (npm install request
) installieren und dann kann Ihr Code folgendermaßen aussehen: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) } })
quelle
Ich benutze get-json sehr einfach zu bedienen:
Importieren
get-json
var getJSON = require('get-json')
Um eine
GET
Anfrage zu stellen, würden Sie Folgendes tun:getJSON('http://api.listenparadise.org', function(error, response){ console.log(response); })
quelle
Eine andere Lösung ist für Benutzer Axios :
Der Code lautet wie folgt:
const url = `${this.env.someMicroservice.address}/v1/my-end-point`; const { data } = await axios.get<MyInterface>(url, { auth: { username: this.env.auth.user, password: this.env.auth.pass } }); return data;
quelle
Unirest Bibliothek vereinfacht dies sehr. Wenn Sie es verwenden möchten, müssen Sie das
unirest
npm-Paket installieren . Dann könnte Ihr Code so aussehen: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) } })
quelle