req.body vuoto sui post


256

All'improvviso è successo a tutti i miei progetti.

Ogni volta che scrivo un post in nodejs usando express e body-parser req.bodyè un oggetto vuoto.

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

var app = express()

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded())

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

app.listen(2000);

app.post("/", function (req, res) {
  console.log(req.body) // populated!
  res.send(200, req.body);
});

Via Ajax e postino è sempre vuoto.

Tuttavia via ricciolo

$ curl -H "Content-Type: application/json" -d '{"username":"xyz","password":"xyz"}' http://localhost:2000/

funziona come previsto.

Ho provato a impostare manualmente Content-type : application/jsonnel primo ma poi ottengo sempre400 bad request

Questo mi sta facendo impazzire.

Ho pensato che fosse qualcosa di aggiornato in body-parser ma ho declassato e non ha aiutato.

Qualsiasi aiuto apprezzato, grazie.


16
Quindi hai provato a impostare esplicitamente il Content-Typepostino? In caso contrario, potresti provarlo, dato che ho già avuto problemi con Postman che non ha inviato a Content-Type.
mscdex,

si l'ho fatto. questo è quando ho ricevuto 400: json non valido
Joseph Dailey,

@mscdex - grazie non ho impostato content-tupe in postino e stavo diventando pazzo :)
Muzafar Ali

Per quelle persone che vengono qui perché desiderano inviare / caricare file dalle loro API e quindi devono utilizzare i dati del modulo. Hai bisogno di qualcosa per gestire i dati del modulo: npmjs.com/package/multer è un pacchetto piuttosto popolare.
bhaskar,

Indipendentemente da ciò, il postino non tratta molto bene i valori interi e float. Se hai valori interi o float, assicurati di
racchiudere tra

Risposte:


272

In Postman delle 3 opzioni disponibili per il tipo di contenuto selezionare "X-www-form-urlencoded" e dovrebbe funzionare.

Inoltre per eliminare il messaggio di errore sostituire:

app.use(bodyParser.urlencoded())

Con:

app.use(bodyParser.urlencoded({
  extended: true
}));

Vedi https://github.com/expressjs/body-parser

Il middleware "body-parser" gestisce solo dati JSON e codificati in url, non multipart


Ha funzionato per il postino, non sono sicuro del perché funzioni con Ajax perché non ho cambiato nulla.
Joseph Dailey,

Per qualche motivo, i post http tramite Angular non dovevano essere codificati in URL, ma le chiamate ajax sì. Qualcuno sa perché?
youngrrrr

Questo ha funzionato per me, perché non ha funzionato con il raw codificato?
Daniel Kobe,

9
ora body-parser è integrato con express.js basta usareapp.use(express.json());
Sujeet Agrahari,

Grazie mille! Nonostante il lungo periodo di risposta, è ancora pertinente.
Spray'n'Pray
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.