小编典典

角度$ resource删除不会将正文发送到express.js服务器

angularjs

我正在服务器端使用angular.js和node.js(Express.js)构建一个应用程序。

由于某些原因,我在处理删除请求时遇到问题。没有人会进入服务器端。

这是我的angular.js资源代码:

$scope.deleteProject = function(projectName){
    var postData = {username: 'name', projectName: projectName};
    Project.deleteProject.delete({}, postData,
        function(res){
            alert('Project Deleted');
        },
        function(err){
            alert(err.data);
    });
}

在服务器端,我有这个:

var deleteProject = function(req, res){
    console.log(req.body);
    console.log(req.params);
    if (req.body.projectName){
        //do something
        return res.send(200);
    }
    else
        return res.send(400, 'no project name was specified');
}

现在由于某种原因根本没有身体!它是空的。我已将路线定义为app.delete。

如果我将node.js中的路由更改为post,将其更改为angular.js以保存,则效果很好。

我在这里想念什么(敲头)。

谢谢。


阅读 274

收藏
2020-07-04

共1个答案

小编典典

根据此堆栈溢出问题和$http服务源代码,使用的DELETE请求$http不允许在请求的正文中发送数据。
对于是否应允许请求正文,DELETE请求的规范有些含糊,但是Angular不支持它。

这允许请求主体的唯一方法是POSTPUTPATCH。因此,问题不在您的代码中的任何地方,而是在Angular的$http服务中。

我的建议是使用泛型$http(...)函数并传递适当的方法:

$http({
    method: 'DELETE',
    url: '/some/url',
    data: {...},
    headers: {'Content-Type': 'application/json;charset=utf-8'}
})
2020-07-04