2012-11-28 64 views
5

我得到一個錯誤,用快遞在bodyParser未能解析任何PUT請求......我的配置設置如下所示:節點/快遞 - bodyParser爲空PUT請求

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

但是每次我向端點發出PUT請求,req.body返回爲'undefined'。

我試圖通過REST鉻合金製作控制檯的要求,同時還通過jQuery Ajax請求,像這樣:

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

任何想法?

+1

固定它 - 對我來說,在高速中間件之前設置我的路線是一件愚蠢的事情。 – leepowell

+0

你可以擴展一下這個,我有一個類似的問題與PUT請求。 –

回答

6

您還需要將內容類型設置爲application/json。你的jQuery請求應該是:

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

否則,主體解析器不會嘗試解析主體。

編輯:這裏是我的測試代碼

  1. 運行express test

  2. 添加/test路線app.js

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

routes/index.js

 
exports.test = function (req, res) { 
    console.log(req.body); 
    res.send({status: 'ok'}); 
}; 
  1. 鏈接jQuery和在index.jade以下腳本:
 
$(function() { 
    $('#test').click(function() { 
    $.ajax({ 
     url: '/test', 
     type: 'PUT', 
     contentType: 'application/json', 
     data: JSON.stringify({name: "Test name"}), 
     dataType: 'json' 
    }); 
    }); 
}); 

當我運行它,我得到以下日誌:

 
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

謝謝,只是試過這個,沒有運氣:( – leepowell

+0

我剛剛測試過,它對我很有用,我會用我的測試代碼更新我的答案 –

+0

謝謝Laurent - 我找到了我的代碼問題。表達中間件,所以沒有什麼是通過bodyParser。 – leepowell