我正在使用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对象?
答案 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 })