2013-07-23 3 views
36

Hier ist mein Modell mit einem Json Antwort:Holen Sie sich ein json über Http Anfrage in NodeJS

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

Hier bekomme ich es über http.request. Warum erhalte ich (Daten) eine Zeichenkette und nicht einen 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(); 

Wie kann ich einen JSON bekommen?

+0

JSON ist eine Serialisierung. Es ist nur JSON, wenn es sich in einer Zeichenfolge befindet oder anderweitig noch nicht als JavaScript analysiert wurde. Suchen Sie nach 'JSON.parse()'? –

+0

das ist es. Danke Matt –

+0

Ich dachte, das 'Daten'-Ereignis wurde jedes Mal mehrmals mit einem Argument aufgerufen, das ein Teil der String-Daten ist. Wäre es nicht sehr wahrscheinlich, dass die "Daten", die in diesem Fall zurückgegeben werden, JSON-Dateien enthalten, weil sie nur einen Bruchteil des gesamten Dokuments ausmachen? Ich denke, Sie müssen die Daten zwischenspeichern und dann 'JSON.parse()' in Ihrem 'Ende'-Ereignis verwenden. – Sukima

Antwort

52

http sendet/empfängt Daten als Zeichenfolgen ... das ist genau so, wie die Dinge sind. Sie suchen die Zeichenfolge als JSON zu analysieren.

var jsonObject = JSON.parse(data); 

How to parse JSON using Node.js?

+2

... meine Entschuldigung, es war einfacher als ich dachte .... danke Chris! –

+0

das ist wirklich hilfreich, danke @ ChrisCM –

45

Gerade Anfrage mitteilen, dass Sie json verwenden: true und vergessen Sie Header und analysieren

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

und das gleiche für die Zeit nach

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

Ich wusste, dass Anfrage konnte eine JSON-Körper geben, aber die Dokumentation war wirklich nicht klar auf diesem Teil! Speichert das Ausführen einer redundanten Syntaxanalyse. Ich habe auch das Gefühl, dass man 'response.toJSON()' – CJxD

+2

tun kann. Dies funktioniert nicht für 'http.request', sondern [request] (https://www.npmjs.com/package/request). – arve0

2

Gerade json Einstellung Option zu true, der Körper w Ill enthält den geparsten JSON:

request({ 
    url: 'http://...', 
    json: true 
}, function(error, response, body) { 
    console.log(body); 
}); 
Verwandte Themen