节点DELETE功能不会接收数据

时间:2015-03-17 09:31:35

标签: angularjs node.js

您好我有以下问题:

我尝试构建一个节点(快速)REST API。到目前为止一切正常,但当我尝试将数据发送到“DELETE”函数时,数据不会到达。

节点

app.use(function (req, res, next) {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    res.setHeader('Access-Control-Allow-Credentials', true);
    next();
});

app.delete('/', function(req, res, next) {

    console.log(req.body.del); // output: undefind

    res.send("delete");
});

$scope.delete = function (del) {

    $scope.del = del;

    $http.delete( 'http://localhost:8080', {del: $scope.del } ).
        success(function(data, status, headers, config) {

            $log.log(data); // delete
            $log.log($scope.del); // correct value
        }).
        error(function(data, status, headers, config) {

            $log.error(data);
        });
};

当我以相同的方式使用POST时,一切运行良好。此外,当我尝试卷曲时,一切运作良好。

curl --request DELETE --data "del=test" 127.0.0.1:8080

问题出在哪里?

1 个答案:

答案 0 :(得分:2)

HTTP DELETE方法不应包含请求正文,并且应在查询字符串中传递任何信息。 Angular的$http.delete将数据作为查询参数传递,而不是作为请求正文的一部分。您需要使用req.query.del来访问请求参数。使用curl,您可以在请求正文中明确传递数据。

强制Angular将参数作为请求体传递:

$http({url: 'http://localhost:8080', method: 'delete', data: {del: $scope.del}});