如何在API和angular度客户端之间启用CORS

我们一直在试图build立CORS几天而没有成功。 因此,非常感谢知道如何做到一劳永逸。 我们想要做的是:

在这里输入图像描述

API服务器(当然只是服务器的一部分):

// Config app.configure(function () { app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json()) app.use(express.methodOverride()); 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"); next(); }); app.use(express.static(path.join(application_root, "public"))); app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); app.use(app.router); }); 

angular度应用服务器(也只是部分设置):

  server.use(gzippo.staticGzip(__dirname + '/public')); server.set('view engine', 'ejs'); // Environment var ENV = process.argv[2] || 'dev'; // prod or dev var port = process.env.PORT || 8080; // Single Page App (this route handles all other requests (catchall)) server.all('/*', function(req, res, next) { res.set('Content-Type', 'text/html'); res.render('index', includeFiles); // looks by default in views }); 

angular度configuration:

  app.config(['$locationProvider', '$httpProvider', '$urlRouterProvider', '$stateProvider', function($locationProvider, $httpProvider, $urlRouterProvider, $stateProvider) { ... Other stuff ... // enable CORS $httpProvider.defaults.useXDomain = true; delete $httpProvider.defaults.headers.common['X-Requested-With']; ... } ]) 

目前,当我们从angular度做一个请求:

  $http.post('http://<ip-address>:8889/signin', {email: 'mike@gmail.com', pass: '1234abcd'}) .success(function(data) { console.log(data); }); 

我们得到以下错误(在Firefox上):

 Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://<ip-address>/signin. (Reason: CORS preflight channel did not succeed). Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://<ip-address>:8889/signin. (Reason: CORS request failed). 

经过一些试验和错误,我们采取了使用npm模块cors和事情smithly工作。

编辑到API服务器:

 // Config app.configure(function () { app.use(bodyParser.urlencoded({ extended: false })) app.use(bodyParser.json()) app.use(express.methodOverride()); app.use(cors()); // this was included app.use(express.static(path.join(application_root, "public"))); app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); app.use(app.router); }); 

angular度configuration:

 app.config(['$locationProvider', '$httpProvider', '$urlRouterProvider', '$stateProvider', function($locationProvider, $httpProvider, $urlRouterProvider, $stateProvider) { ... Other stuff ... // deleted these rows, since they are unnecessary // $httpProvider.defaults.useXDomain = true; // delete $httpProvider.defaults.headers.common['X-Requested-With']; ... } ]) 

这就是它! 希望它可以帮助未来的人。