【问题标题】:Node/Express - bodyParser empty for PUT requestsNode/Express - 对于 PUT 请求,bodyParser 为空
【发布时间】:2012-11-28 10:26:27
【问题描述】:

我在 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'
 });

有什么想法吗?

【问题讨论】:

  • 已修复 - 我在 express 中间件之前设置路由是一件愚蠢的事情。
  • 您能否对此进行一些扩展,我在 PUT 请求方面遇到了类似的问题。

标签: node.js rest express put


【解决方案1】:

您还需要将 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. app.js中添加/test路由:

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

【讨论】:

  • 我刚刚测试过,它对我有用。我会用我的测试代码更新我的答案。
  • 感谢 Laurent - 我发现我的代码有问题。我在 express 中间件之前设置了路由,所以没有任何东西通过 bodyParser。
猜你喜欢
  • 2013-03-28
  • 1970-01-01
  • 1970-01-01
  • 2021-04-28
  • 2014-12-29
  • 2017-01-14
  • 2019-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多