在服务器上部署Angular Full Stack App时的跨域原因问题

时间:2015-02-17 00:13:02

标签: angularjs express angular-fullstack

我真的不知道这里;我在GitHub,Google和StackOverflow上搜索了这个问题的极端延伸,没有解决方案。

我有一个Angular Fullstack Generator应用程序。这构建如下:

Node -> Express -> Angular

我在这里不做任何事;我的应用程序在我家的开发机器上运行得很好。然而,一旦我构建它,将其缩小并通过节点而不是grunt在Internet上的服务器上启动它;我看到html渲染,css加载,但在尝试验证时(我正在使用express-jwt);我全面收到CROSS Domain Origin Problems。

我在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请求任何东西。所有资源都驻留在我的服务器上。所有请求都来自一个浏览器。

您可以在响应标题中看到:

 access-control-allow-origin: *

然后当OPTIONS请求中的登录发送到localhost而不是FQDN并立即以红色字母中止时。

1 个答案:

答案 0 :(得分:1)

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

var cors    = require('cors');

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

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