2012-11-28 10 views
5

ich einen Fehler mit Express in bodyParser immer versagt alle PUT-Anfragen ... meine Config zu analysieren ist, wie so ein:Node/Express - bodyParser leer für PUT-Anfragen

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

Jedoch habe ich jedes Mal Wenn Sie eine PUT-Anforderung an einen Endpunkt senden, wird req.body als 'undefined' zurückgegeben.

Ich habe versucht, Ihre Anfrage durch den Chromes REST-Konsole zu machen, und auch über Anfragen jQuery Ajax wie so:

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

Irgendwelche Ideen?

+1

es fest - war eine alberne Sache von mir, meine Routen vor der Express-Middleware zu setzen. – leepowell

+0

könnten Sie ein wenig erweitern, ich habe ein ähnliches Problem mit PUT-Anfragen. –

Antwort

6

Sie müssen auch den Inhaltstyp auf application/json festlegen. Ihre jQuery-Anfrage sollte lauten:

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

Andernfalls versucht der Body-Parser nicht, den Körper zu analysieren.

EDIT: hier ist mein Testcode

  1. Run express test

  2. eine /test Route in app.js hinzufügen:

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

und routes/index.js :

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

Als ich das laufen, ich folgendes Protokoll erhalten:

 
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

Danke, habe gerade dieses und kein Glück versucht :( – leepowell

+0

Ich habe es gerade getestet und es funktioniert für mich. Ich werde meine Antwort mit meinem Testcode aktualisieren. –

+0

Danke Laurent - Ich habe das Problem mit meinem Code gefunden Express Middleware, also ging nichts durch den BodyParser. – leepowell