您好我有以下问题:
我尝试构建一个节点(快速)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
问题出在哪里?
答案 0 :(得分:2)
HTTP DELETE
方法不应包含请求正文,并且应在查询字符串中传递任何信息。 Angular的$http.delete
将数据作为查询参数传递,而不是作为请求正文的一部分。您需要使用req.query.del
来访问请求参数。使用curl
,您可以在请求正文中明确传递数据。
强制Angular将参数作为请求体传递:
$http({url: 'http://localhost:8080', method: 'delete', data: {del: $scope.del}});