2012-04-04 2 views
198

Ich sende die folgende JSON-Zeichenfolge an meinen Server.Wie konsumiere ich die JSON POST-Daten in einer Express-Anwendung

(
     { 
     id = 1; 
     name = foo; 
    }, 
     { 
     id = 2; 
     name = bar; 
    } 
) 

Auf dem Server habe ich dies.

app.post('/', function(request, response) { 

    console.log("Got response: " + response.statusCode); 

    response.on('data', function(chunk) { 
     queryResponse+=chunk; 
     console.log('data'); 
    }); 

    response.on('end', function(){ 
     console.log('end'); 
    }); 
}); 

Wenn ich die Zeichenfolge senden, zeigt es, dass ich eine 200-Antwort bekam, aber die beiden anderen Methoden laufen nie. Warum das?

Antwort

258

Ich denke, dass Sie die Verwendung des response Objekts mit dem der request verbinden.

Das Objekt response dient zum Senden der HTTP-Antwort an den aufrufenden Client, während Sie auf den Textkörper der request zugreifen möchten. Sehen Sie dieses answer, das einige Anleitung zur Verfügung stellt.

Wenn Sie mit Content-Type: application/json gültig JSON und Mitteilung verfassen, sie verwenden, dann können Sie die bodyParser Middleware verwenden, um die Anfrage Körper und das Ergebnis in request.body Ihrer Route zu analysieren.

var express = require('express') 
    , app = express.createServer(); 

app.use(express.bodyParser()); 

app.post('/', function(request, response){ 
    console.log(request.body);  // your JSON 
    response.send(request.body); // echo the result back 
}); 

app.listen(3000); 

-Test entlang der Linien von:

$ curl -d '{"MyKey":"My Value"}' -H "Content-Type: application/json" http://127.0.0.1:3000/ 
{"MyKey":"My Value"} 

für Express aktualisiert 4+

Körper Parser wurde nach v4 in seiner eigenen npm Paket aufzuschlüsseln, erfordert eine separate Installation von npm install body-parser

var express = require('express') 
    , bodyParser = require('body-parser'); 

var app = express(); 

app.use(bodyParser.json()); 

app.post('/', function(request, response){ 
    console.log(request.body);  // your JSON 
    response.send(request.body); // echo the result back 
}); 

app.listen(3000); 
+0

Wie würde ich „MyKey“ zu erhalten „My Value“ zugreifen? – neuromancer

+12

'request.body.MyKey' –

+0

Wie funktioniert es nicht für console.log (" request = "+ request.body)? – neuromancer

176

Für Express v4 +

body-parser von der npm installieren.

$ npm install body-parser 

https://www.npmjs.org/package/body-parser#installation

var express = require('express') 
var bodyParser = require('body-parser') 

var app = express() 

// parse application/json 
app.use(bodyParser.json()) 

app.use(function (req, res, next) { 
    console.log(req.body) // populated! 
    next() 
}) 
+14

Warum nehmen sie Sachen raus, die jeder benutzt? – light24bulbs

+9

@ light24bulbs So wird es (Express) schlanker und gemein für diejenigen sein, die das nicht brauchen/brauchen. – andyengle

+5

@andyengle Das macht Sinn. Aber ich denke, dass praktisch jeder das Parsen von Anfragen verwendet. Das scheint mir ein Kernmerkmal zu sein. – light24bulbs

6

Manchmal braucht man keine Drittanbieter-Bibliotheken JSON von Text zu analysieren. Manchmal alles, was Sie brauchen es die folgenden JS Befehl, versuchen Sie es zuerst:

 const res_data = JSON.parse(body); 
+3

Die ursprüngliche Frage bezieht sich auf das Analysieren von JSON aus einer POST-Nachricht im Express-Framework. Ohne die BodyParser-Middleware sind die JSON-Daten nicht in der body-Eigenschaft des Anforderungsobjekts vorhanden. – ThisClark

+1

Ich fand dies nützlich, wenn Server Antwort analysieren. Vielen Dank! –

+1

Vielen Dank Hasan, ich freue mich über Ihren Kommentar. Es hat mir geholfen, als ich nach einer Lösung suchte und auf diesen Posten stieß. Nicht sicher, ob es in allen Fällen funktioniert, aber es funktioniert definitiv in einigen und es ist eine bessere Lösung als die Verwendung von Third-Party-Bibliothek. – xims