将https请求从angular度发送到nodejs。 无法发送任何数据

所以首先我有我的angular应用程序:

var app = angular.module('app', []); angular.module('app.controllers', []); app.config(function($httpProvider){ delete $httpProvider.defaults.headers.common['X-Requested-With']; $httpProvider.defaults.headers.common = {}; $httpProvider.defaults.headers.post = {}; $httpProvider.defaults.headers.put = {}; $httpProvider.defaults.headers.patch = {}; }); 

这里是一个angular度控制器:

 angular.module('app').controller('loginController', ['$scope', '$http', function($scope, $http){ $http({ method: 'POST', url: 'https://xxx-xxx.c9users.io:xxxx/api/registerUser', headers: { 'Content-Type': 'application/json' }, data: { test: 'something' } }); }]); 

然后是我的nodejs代码:

 var express = require('express'); var app = express(); var bodyParser= require('body-parser'); app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS"); next(); }); app.use(bodyParser.json()); var server = app.listen(process.env.PORT, function () { var host = server.address().address var port = server.address().port }); app.post('/api/registerUser', function (req, res) { //req.body.test do something.. }); 

所以每当我尝试发送这个请求到节点服务器。 我的浏览器控制台中出现以下错误:

*选项https://xxx-xxx.c9users.io:xxx/api/registerUser *

XMLHttpRequest无法加载https://xxx-xxx.c9users.io:xxxx/api/registerUser 。 预检的响应具有无效的HTTP状态码404

而服务器从来没有得到要求。 但是,如果我只是这样称呼它:

 $http.post('https://xxx-xxx.c9users.io:xxxx/api/registerUser'); 

服务器不会有任何麻烦接收请求,但没有数据。 我在这里做错了什么?

如果您从其他域请求,则必须允许来自服务器端的跨源资源。

这里是如何使用快速框架打开CORS的小节点片段。

NodeJS代码片段

 allowCrossDomain = function(req, res, next) { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With'); if ('OPTIONS' === req.method) { res.send(200); } else { next(); } }; app.use(allowCrossDomain); 

我同意,在我看来你缺less选项的方法。 还加上这个:

 res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");