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

Tom*_*ino 4 node.js express http-delete body-parser

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

这就是我发起它的方式:

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

Har*_*and 13

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

DELETE请求的规范在是否允许请求主体方面有些模糊,但Angular不支持它.

允许请求主体的唯一方法是POST,PUT和PATCH.所以问题不在你的代码中的任何地方,而是在Angular的$ http服务中.

用这个

$httpProvider.defaults.headers.delete = { "Content-Type": "application/json;charset=utf-8" };
Run Code Online (Sandbox Code Playgroud)

然后

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