2016-07-10 25 views
7

Quindi ho il seguente codice nel mio file server.js che sto usando con node.js. Sto usando express per gestire le richieste HTTP.Express.js POST req.body vuoto

app.post('/api/destinations', function (req, res) { 
    var new_destination = req.body; 
    console.log(req.body); 
    console.log(req.headers); 
    db.Destination.create(new_destination, function(err, destination){ 
    if (err){ 
     res.send("Error: "+err); 
    } 
    res.json(destination); 
    }); 
}); 

sto correndo in Terminale quanto segue:

curl -XPOST -H "Content-Type: application/json" -d '{"location": "New York","haveBeen": true,"rating": 4}' http://localhost:3000/api/destinations 

Dopo aver eseguito che stampa server.js quanto segue.

{} 
{ host: 'localhost:3000', 
    'user-agent': 'curl/7.43.0', 
    accept: '*/*', 
    'content-type': 'application/json', 
    'content-length': '53' } 

Così req.body è {}. Ho letto altri post Stack Overflow su problemi simili in cui il content-type non era corretto a causa di body parser. Ma questo non è il problema perché il tipo di contenuto è application/json.

Qualche idea su come ottenere il corpo reale della richiesta?

Grazie in anticipo.

+0

Si utilizza il middleware body parser, giusto? – Cristy

+0

E se sei: come, esattamente? – robertklep

+0

Sto usando il parser del corpo. Fondamentalmente lo richiede semplicemente "app.use (bodyParser.urlencoded ({extended: true}));" senza le virgolette ovviamente. –

risposta

16

È necessario bodyParser.json così:

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

Questo ha funzionato. Grazie mille!! Non posso credere di averlo dimenticato. –

+2

Grazie! Non so perché, ma quando ho provato 'app.use (bodyParser.json()); 'dopo aver letto il tuo commento, ha funzionato, anche se l'ho provato molte volte prima. Deve essere una risposta magica;) – TetraDev

+5

Sto ancora avendo un corpo vuoto nonostante entrambe le linee siano incluse. Non so perché. – Micrified

5

A volte gli spettacoli req.body {} se avete dimenticato di mettere il nome attributo per i campi di input modulo. Di seguito è riportato un esempio:

<input type="email" name="myemail" class="form-control" id="exampleInputEmail2" placeholder="Email address" required> 

Poi il req.body mostra { myemail: '[email protected]' }

che inserisco questa risposta perché, ho incontrato il problema simile e questo ha funzionato per me.

+0

mi chiedevo perché il parser del corpo funziona solo con gli attributi "nome" negli input, non solo "id" .Questa risposta mi aiuta molto, a volte abbiamo semplicemente dimenticato queste cose di base. mai usato nomi nei campi di input, quindi questo era insolito per me. –

Problemi correlati