web-dev-qa-db-fra.com

Appel d'une API JSON avec Node.js

J'essaie d'obtenir la photo de profil facebook de l'utilisateur connecté à mon application. L'API de Facebook indique que http://graph.facebook.com/517267866/?fields=picture renvoie l'URL correcte sous forme d'objet JSON. 

Je veux obtenir l'URL de l'image sur mon code. J'ai essayé ce qui suit mais il me manque quelque chose ici.

 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);
 });

L'exécution de ce code a les conséquences suivantes:

undefined:1

^
SyntaxError: Unexpected token o
    at Object.parse (native)
66
Sven

L'argument res du rappel http.get() n'est pas le corps, mais plutôt un objet http.ClientResponse . Vous devez assembler le corps:

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);
});
122
Laurent Perrin

Je pense que pour des requêtes HTTP simples comme celle-ci, il vaut mieux utiliser le module request . Vous devez l'installer avec npm (npm install request) pour que votre code ressemble à ceci:

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)
  }
})
16

J'utilise get-json très simple d'utilisation:

$ npm install get-json --save

Importer get-json

var getJSON = require('get-json')

Pour faire une demande GET, vous feriez quelque chose comme:

getJSON('http://api.listenparadise.org', function(error, response){
    console.log(response);
})
4
MrMins

Unirest library simplifie beaucoup cela. Si vous voulez l'utiliser, vous devez installer le paquetage unirest npm. Ensuite, votre code pourrait ressembler à ceci:

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)
    }
  })
0