2012-11-28 52 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