2012-11-28 14 views
5

che sto ottenendo un errore con Express bodyParser sta fallendo per analizzare eventuali richieste PUT ... la mia configurazione è impostato in questo modo:Nodo/Express - bodyParser vuoto per le richieste PUT

app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
app.use(express.query()); 
app.use(app.router); 

Tuttavia ogni volta che effettuare una richiesta PUT a un endpoint, req.body restituisce come "non definito".

Ho provato a fare richiesta tramite Chromes REST console, e anche attraverso le richieste ajax jQuery in questo modo:

$.ajax({ 
    url: 'https://localhost:4430/api/locations/5095595b3d3b7b10e9f16cc1', 
    type: 'PUT', 
    data: {name: "Test name"}, 
    dataType: 'json' 
}); 

Tutte le idee?

+1

ha riparato - era una cosa sciocca da parte mia impostare i miei percorsi prima del middleware espresso. – leepowell

+0

potresti espandere un po 'su questo, sto avendo un problema simile con le richieste PUT. –

risposta

6

È inoltre necessario impostare Content-Type su application/json. La tua richiesta jQuery dovrebbe essere:

$.ajax({ 
    url: 'https://localhost:4430/api/locations/5095595b3d3b7b10e9f16cc1', 
    type: 'PUT', 
    contentType: 'application/json', 
    data: JSON.stringify({name: "Test name"}), 
    dataType: 'json' 
}); 

In caso contrario, il parser del corpo non tenterà di analizzare il corpo.

EDIT: ecco il mio codice di prova

  1. Run express test

  2. aggiungere un percorso /test in app.js:

 
app.all('/test', routes.test); 

e routes/index.js :

 
exports.test = function (req, res) { 
    console.log(req.body); 
    res.send({status: 'ok'}); 
}; 
  1. collegamento jQuery e il seguente script in index.jade:
 
$(function() { 
    $('#test').click(function() { 
    $.ajax({ 
     url: '/test', 
     type: 'PUT', 
     contentType: 'application/json', 
     data: JSON.stringify({name: "Test name"}), 
     dataType: 'json' 
    }); 
    }); 
}); 

Quando eseguo questo, ricevo il seguente registro:

 
Express server listening on port 3000 
GET/200 26ms - 333 
GET /stylesheets/style.css 304 2ms 
GET /javascripts/test.js 304 1ms 
{ name: 'Test name' } 
PUT /test 200 2ms - 20 
+0

Grazie, ho appena provato questo e senza fortuna :( – leepowell

+0

Ho appena provato e funziona per me. Aggiornerò la mia risposta con il mio codice di test –

+0

Grazie Laurent - Ho trovato il problema con il mio codice. esprimere il middleware in modo che nulla passasse attraverso il bodyParser. – leepowell

Problemi correlati