Obtenir un json via une requête Http dans NodeJS

Voici mon modèle avec une réponse json:

exports.getUser = function(req, res, callback) {
    User.find(req.body, function (err, data) {
        if (err) {
            res.json(err.errors);
        } else {
            res.json(data);
        }
   });
};

ici je l'obtiens via http.demande. Pourquoi est-ce que je reçois (des données) une chaîne de caractères et pas un json?

 var options = {
  hostname: '127.0.0.1'
  ,port: app.get('port')
  ,path: '/users'
  ,method: 'GET'
  ,headers: { 'Content-Type': 'application/json' }
};

var req = http.request(options, function(res) {
  res.setEncoding('utf8');
  res.on('data', function (data) {
       console.log(data); // I can't parse it because, it's a string. why?
  });
});
reqA.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});
reqA.end();

Comment puis-je obtenir un json?

42
demandé sur Pete B. 2013-07-23 17:37:13

3 réponses

http envoie/reçoit des données sous forme de chaînes... c'est juste la façon dont les choses sont. Vous cherchez à analyser la corde comme json.

var jsonObject = JSON.parse(data);

comment analyser JSON en utilisant Node.js?

59
répondu ChrisCM 2017-05-23 12:34:11

dis-demande que vous êtes en utilisant json:vrai et oublier d'en-tête et analyser

var options = {
    hostname: '127.0.0.1',
    port: app.get('port'),
    path: '/users',
    method: 'GET',
    json:true
}
request(options, function(error, response, body){
    if(error) console.log(error);
    else console.log(body);
});

et le même pour la poste

var options = {
    hostname: '127.0.0.1',
    port: app.get('port'),
    path: '/users',
    method: 'POST',
    json: {"name":"John", "lastname":"Doe"}
}
request(options, function(error, response, body){
    if(error) console.log(error);
    else console.log(body);
});
53
répondu dpineda 2015-11-11 03:35:47

Just setting json option de true , le corps contiendra le JSON parsé:

request({
  url: 'http://...',
  json: true
}, function(error, response, body) {
  console.log(body);
});
4
répondu José Antonio Postigo 2017-09-18 19:37:04