6

我在 bodyParser 中遇到 Express 错误,无法解析任何 PUT 请求...我的配置设置如下:

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

但是,每次我向端点发出 PUT 请求时,req.body 都会返回“未定义”。

我尝试通过 Chrome REST 控制台发出请求,也尝试通过 jQuery ajax 请求,如下所示:

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

有任何想法吗?

4

1 回答 1

6

您还需要将 Content-Type 设置为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

export.test = 函数(请求,资源){
  控制台.log(req.body);
  res.send({status: 'ok'});
};
  1. 在 index.jade 中链接 jQuery 和以下脚本:
$(函数(){
  $('#test').click(function () {
    $.ajax({
      网址:'/测试',
      类型:'PUT',
      内容类型:'应用程序/json',
      数据:JSON.stringify({name:“测试名称”}),
      数据类型:'json'
    });
  });
});

当我运行它时,我得到以下日志:

Express 服务器监听 3000 端口
获取 / 200 26ms - 333
获取 /stylesheets/style.css 304 2ms
获取 /javascripts/test.js 304 1ms
{ name: '测试名称' }
放置/测试 200 2ms - 20
于 2012-11-28T11:08:14.893 回答