在服务器上部署 Angular 全栈应用程序时出现跨域源问题

Cross Domain Origin Problems when deploying Angular Full Stack App on Server

我这里真的是一窍不通;我在 GitHub、Google 和 Whosebug 上对这个问题进行了极端搜索,但没有解决。

我有一个 Angular Fullstack 生成器应用程序。这是构建如下:

Node -> Express -> Angular

我在这里没有做任何不寻常的事情;我的应用程序在我家里的开发机器上运行得很好。然而,一旦我构建了它,就将它缩小并通过节点而不是 grunt 在我的互联网服务器上启动它;我看到 html 呈现,css 加载,但在尝试进行身份验证时(我为此使用 express-jwt);我到处都遇到跨域起源问题。

我在 npm 上使用 CORS 模块;那是一个不需要任何设置就能让一切通过的问题,所以不要将这个问题标记为重复,它不是;我可以向你保证!

服务器端的 app.js 基本上是这样构建的:

var express = require('express');
var app     = express();
var config  = require('./config/environment');
var cors    = require('cors');
var server  = require('http').createServer(app);

require('./config/express')(app);
require('./routes')(app);
require('./config/passport')(passport); 

app.use(cors());
app.options('*', cors()); 

require('./routes')(app, passport);

server.listen(config.port, config.ip, function () {
  console.log('Express server listening on %d, in %s mode', config.port, app.get('env'));
});

exports = module.exports = app;

这是我的浏览器向我显示的内容:

Cross-Origin-Request blocked: The Same-Origin-Policy....

我不明白 - 我根本 x-origin 没有要求任何东西。所有资源都驻留在我的服务器上。所有请求都来自一个浏览器。

回复中可以看到headers:

 access-control-allow-origin: *

然后当登录时,OPTIONS 请求被发送到本地主机而不是 FQDN,并立即以红色字母中止。

必须在路由之前调用Cors。这就是我一劳永逸地摆脱所有 CROSS Domain Origin 问题的方法:

var cors    = require('cors');

app.use(cors());
app.options('*', cors()); 

require('./routes')(app);