Wie verwende ich die JSON-POST-Daten in einer Express-Anwendung?

Ich sende die folgende JSON-Zeichenfolge an meinen Server.

<code>(
        {
        id = 1;
        name = foo;
    },
        {
        id = 2;
        name = bar;
    }
)
</code>

Auf dem Server habe ich das.

<code>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');
    });
});
</code>

Wenn ich die Zeichenfolge sende, wird angezeigt, dass ich 200 Antworten erhalten habe, diese beiden anderen Methoden werden jedoch nie ausgeführt. Warum das?

Antworten auf die Frage(4)

Installieren Sie Body-Parser von der Npm.

<code>$ npm install body-parser
</code>

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

<code>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()
})
</code>
 mrid04. Okt. 2017, 08:25
Mein Körper kehrt leer zurück, wenn der Datentyp JSON ist
 andyengle04. Nov. 2014, 03:38
@ light24bulbs Also (Express) wird schlanker und gemeiner für diejenigen, die das nicht benutzen / brauchen.
 light24bulbs05. Nov. 2014, 03:54
@andyengle Das macht Sinn. Aber ich denke, dass praktisch jeder Anfrage-Parsing verwendet. Das scheint mir ein Kernmerkmal zu sein.
 Anm31. Jan. 2015, 13:53
Da die Middleware-Funktionsschnittstelle ein Standard ist, der von vielen Bibliotheken verwendet wird, können Apps, die Express nicht verwenden, diese Middleware-Funktionen verwenden.
 light24bulbs17. Okt. 2014, 06:30
warum nehmen sie ständig Sachen heraus, die jeder benutzt?
 J.J23. Okt. 2016, 16:31
Wenn Sie es aus dem Expressmodus nehmen, kann es nicht von Apps verwendet werden, die keine Anforderungen verwenden. Sie hätten es trennen und standardmäßig in express aufnehmen können.

um JSON aus Text zu analysieren. Manchmal reicht es, wenn Sie den folgenden JS-Befehl eingeben:

<code>        const res_data = JSON.parse(body);
</code>
 Hasan Alsawadi09. Nov. 2016, 09:21
Ich fand das nützlich, wenn ich die Serverantwort analysierte. Vielen Dank!
 Tomáš Zato26. Sept. 2017, 00:31
Aber woher bekomme ich den Saitenkörper?
 jameshfisher25. Dez. 2016, 09:34
definiert nichtbody
 xims11. Nov. 2016, 01:48
Danke Hasan, ich freue mich über deinen Kommentar. Es hat mir geholfen, als ich nach einer Lösung gesucht habe und auf diesen Beitrag gestoßen bin. Ich bin nicht sicher, ob es in allen Fällen funktioniert, aber es funktioniert definitiv in einigen Fällen und es ist eine bessere Lösung als die Verwendung von Bibliotheken von Drittanbietern.
 ThisClark07. Nov. 2016, 03:39
Die ursprüngliche Frage bezieht sich auf das Parsen von JSON aus einer POST-Nachricht im Express-Framework. Ohne die BodyParser-Middleware sind die JSON-Daten in der body-Eigenschaft des Anforderungsobjekts nicht vorhanden.
 dewwwald20. Dez. 2016, 21:19
Ihre Antwort und ein Kommentar liefern der Antwort mehr Informationen (je mehr Informationen Sie hier beantworten). Sie sollten Ihre Antwort aktualisieren, um anzugeben, dass express den Body-Parser benötigt, oder eine Alternative angeben, wie der Body-Parser überhaupt auf die Daten gekommen ist.

req.body

Ich hatte vergessen zu setzenheaders: {"Content-Type": "application/json"} in der Anfrage. Das Ändern löste das Problem.

 James M. Lay24. Jan. 2019, 02:03
Kann nicht glauben, dass ich das verpasst habe! Ich habe mitgeschickttext/json und bekommen{} als Antwort. Völlige Kontrolle meinerseits. Sehr hilfreich.
Lösung für das Problem

response Objekt mit dem derrequest.

Dasresponse Das Objekt dient zum Zurücksenden der HTTP-Antwort an den aufrufenden Client, während Sie auf den Hauptteil von zugreifen möchtenrequest. Sieh dir das anAntworten das gibt eine Anleitung.

Wenn Sie gültiges JSON verwenden und es mit POSTENContent-Type: application/json, dann kannst du das benutzenbodyParser Middleware, um den Anfragetext zu analysieren und das Ergebnis in zu platzierenrequest.body von Ihrer Route.

<code>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);
</code>

Testen Sie nach folgenden Grundsätzen:

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

Aktualisiert für Express 4+

Body Parser wurde nach v4 in ein eigenes npm-Paket aufgeteilt, das eine separate Installation erfordertnpm install body-parser

<code>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);
</code>

Update für Express 4.16+

Ab Release 4.16.0 gibt es eine neueexpress.json() Middleware ist verfügbar.

<code>var express = require('express');

var app = express();

app.use(express.json());

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

app.listen(3000);
</code>
 neuromancer04. Apr. 2012, 12:26
Ich dachte, es wäre so etwas. Wie kann ich das ändern, damit es funktioniert?
 neuromancer04. Apr. 2012, 11:07
Wie würde ich auf "MyKey" zugreifen, um "My Value" zu erhalten?
 Keith Pinson13. Juni 2014, 22:32
Könnten Sie diese Antwort für Express v4 + aktualisieren?
 neuromancer04. Apr. 2012, 11:40
Wie kommt es, dass es für console.log ("request =" + request.body) nicht funktioniert?
 neuromancer05. Apr. 2012, 01:32
 Pero P.14. Dez. 2016, 19:21
Antwort für Express v4 + aktualisiert
 Emil Ingerslev11. Jan. 2016, 10:30
Diese Antwort ist veraltet, aber die von @chrisarton ist aktuell.
 Pero P.04. Apr. 2012, 12:15
Weil die Verkettung aufrufttoString() auf dem Objekt. Schauen Sie sich die Node Docs für anconsole.logprüft das Objekt und gibt eine Zeichenfolgendarstellung zurück.
 Pero P.04. Apr. 2012, 18:49
console.log('request =' + JSON.stringify(request.body))
 Tommy Stanton02. Okt. 2013, 01:10
Die jetzigeconsole.log() stringifiziert automatisch ein Objekt (viautil.inspect()), so würde dies funktionieren:console.log("with request", request.body);
 Pero P.04. Apr. 2012, 11:10
request.body.MyKey
 codeinprogress21. Dez. 2016, 16:14
@pero kannst du mir bitte dabei helfen:github.com/expressjs/body-parser/issues/213
 mike james13. Nov. 2013, 21:58
Hallo, ich habe das folgende Problem:stackoverflow.com/questions/19917401/… und den folgenden Code:codepen.io/mike-jam-es/pen/hHbwJ Express: 3.4.4 Wenn jemand dabei helfen könnte, wäre er sehr dankbar, danke!

Ihre Antwort auf die Frage