使用express和body-parser解析DELETE请求时,body是空的

时间:2016-06-13 17:55:06

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

我正在使用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网络调试器显示在两种情况下都要发送的数据。

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

1 个答案:

答案 0 :(得分:13)

$ 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 })