it-swarm.com.de

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

Ich sende die folgende JSON-Zeichenfolge an meinen Server.

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

Auf dem Server habe ich das.

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 sende, wird angezeigt, dass ich 200 Antworten erhalten habe, diese beiden anderen Methoden werden jedoch nie ausgeführt. Warum ist das so?

272
neuromancer

Ich denke, Sie verschmelzen die Verwendung des Objekts response mit der des Objekts request.

Das Objekt response dient zum Zurücksenden der HTTP-Antwort an den aufrufenden Client, während Sie auf den Hauptteil von request zugreifen möchten. Lesen Sie diese Antwort , die eine Anleitung bietet.

Wenn Sie gültiges JSON verwenden und es mit Content-Type: application/json veröffentlichen, können Sie die Middleware bodyParser verwenden, um den Anforderungshauptteil zu analysieren und das Ergebnis in request.body Ihrer Route zu platzieren.

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

Testen Sie nach folgenden Kriterien:

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

Aktualisiert für Express 4 +

Body Parser wurde nach v4 in ein eigenes npm-Paket aufgeteilt, erfordert eine separate Installation 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);

Update für Express 4.16 +

Ab Release 4.16.0 ist eine neue express.json() Middleware verfügbar.

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);
407
Pero P.

Für Express v4 +

installieren Sie Body-Parser von der Npm.

$ 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()
})
196
chrisarton

Manchmal benötigen Sie keine Bibliotheken von Drittanbietern, um JSON aus Text zu analysieren. Manchmal reicht es, wenn Sie den folgenden JS-Befehl eingeben:

        const res_data = JSON.parse(body);
12
xims
const express = require('express');
let app = express();
app.use(express.json());

Mit dieser app.use (express.json) können Sie jetzt das JSON-Objekt für eingehende Posts lesen

4
SuRa

Für diejenigen, die ein leeres Objekt in req.body erhalten

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

3
Daniel Thompson

@Daniel Thompson erwähnt, dass er vergessen hat, {"Content-Type": "application/json"} in request einzufügen. Er konnte die Anfrage ändern, Änderungen sind jedoch nicht immer möglich (wir arbeiten hier am Server).

In meinem Fall musste ich erzwingen, dass content-type: text/plain als json analysiert wird.

Wenn Sie den Inhaltstyp der Anforderung nicht ändern können, verwenden Sie den folgenden Code:

app.use(express.json({type: '*/*'}));

Anstatt express.json () global zu verwenden, ziehe ich es vor, es nur bei Bedarf anzuwenden, zum Beispiel in einer POST -Anforderung:

app.post('/mypost', express.json({type: '*/*'}), (req, res) => {
  // echo json
  res.json(req.body);
});
0
anneb