【问题标题】:body is empty when parsing DELETE request with express and body-parser使用 express 和 body-parser 解析 DELETE 请求时,body 为空
【发布时间】:2016-10-14 06:06:06
【问题描述】:

我正在使用 expressjs 和 body-parser 中间件。

这就是我启动它的方式:

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

我正在从客户端发送一个 DELETE 请求,当我尝试从服务器端获取它时,我得到一个空对象:

app.delete('/', function(req, res) {
    console.log(util.inspect(req.body)); //outputs {}
    //some more code
});

但是,当我通过 POST 发送它时,我得到了我需要的东西:

app.post('/delete', function(req, res) {
    console.log(util.inspect(req.body)); //outputs { mid: 'ffw1aNh2' }
    //some more code
});

值得注意的是,我没有在客户端 (angularjs) 上进行任何更改,但方法和 url 以及 firefox 网络调试器显示了两种情况下正在发送的数据。

这里缺少什么?为什么我在 delete 方法上得到一个空的 body 对象?

【问题讨论】:

  • This 可能感兴趣。
  • 这并不能真正帮助我理解。它在那里说 DELETE 请求有一个主体,而且,它没有被劝阻或禁止。所以更有理由认为 body 对象不应该为空,不是吗?
  • body-parser 不关心 AFAIK 使用的 HTTP 方法,它应该与DELETE 一起工作得很好。 requestContent-Type 标头看起来没问题吗?
  • 现在我检查了,有区别。当我使用 POST 时,内容类型是 application/json,而使用 DELETE 时,它是 text/plain
  • @TomKlino 那是你的问题 :) body-parser 只查找 JSON 或 URL 编码的正文数据,而不是 text/plain

标签: node.js express http-delete body-parser


【解决方案1】:

$http 服务源代码,使用 $http 的 DELETE 请求不允许在请求正文中发送数据。

DELETE 请求的规范对于是否应允许请求正文有些模糊,但 Angular 不支持它。

允许请求正文的唯一方法是 POST、PUT 和 修补。所以问题不在于您的代码中的任何地方,而在于 Angular 的 $http 服务。

使用这个

$httpProvider.defaults.headers.delete = { "Content-Type": "application/json;charset=utf-8" };

然后

$http.delete(url, { data: data })

【讨论】:

  • 我尊重地不同意基于显而易见的事实。正如我在问题中所说,Firefox 网络调试器清楚地显示了我正在发送的数据。
  • ...但是标题错误!那确实解决了它。虽然,我不得不放弃“提供者”只是$http.defaults...
  • $httpProvider 将在您的配置中使用,这样它就位于您的应用程序的中心位置
猜你喜欢
  • 2016-07-25
  • 1970-01-01
  • 2019-02-25
  • 1970-01-01
  • 1970-01-01
  • 2017-11-06
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多