Node.js $http DELETE变为选项AngularJS

Node.js $http DELETE变为选项AngularJS,node.js,angularjs,rest,express,Node.js,Angularjs,Rest,Express,当我使用put或delete时,它会变成选项。我正在为我的服务器框架使用expressjs 客户: $http({ method: 'DELETE', url: HTTP_URL + '/update/account', params: { mail: mail } }); 服务器: app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.he

当我使用put或delete时,它会变成选项。我正在为我的服务器框架使用expressjs

客户:

$http({
    method: 'DELETE',
    url: HTTP_URL + '/update/account',
    params: { mail: mail }
});
服务器:

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

对CORS发出飞行前HTTP选项请求不是很正常吗?您可能需要允许访问控制允许方法列表中的选项…

我建议您使用$resource而不是$http。这将为您节省一些样板文件,因此:

var appServices = angular.module('appServices', [
  'ngResource'
]);

appServices.factory('Account', ['$resource', function($resource) {
  return $resource('/accountUpdate/:accountMail', {accountMail: '@accountMail});
}]);
然后,您可以插入帐户服务并发出删除请求,如下所示:

Account.remove({accountMail: 'admin@admin.com'});

.$resource

浏览器自动发送CORS飞行前选项请求;这是正确的行为,你无法避免。如果服务器允许源代码、方法等,那么浏览器将继续执行删除请求。

请澄清您收到了哪些错误?正如@natwallbank所说,浏览器会发出飞行前HTTP选项请求,询问是否有权发出实际请求。如果您正在发出“不那么简单的请求”,则会发生这种情况。删除就是此类请求之一。我确实允许在访问控制允许方法中使用选项,同样的情况也会发生。我没有app.OPTIONS('users/update'),因为我有app.DELETE('users/update'),那么我应该在Origin中修改什么,我假设你的意思是浏览器没有发送删除请求。在选项请求中向服务器发送哪些特定头,以及服务器在选项响应中发回哪些特定头?有了这些信息,问题就显而易见了。您可能希望使用Fiddler之类的工具来监视请求/响应。