编辑:可能值得注意的是,我是在GoDaddy注册的域名,该域名将屏蔽转发到我的Bitnami IP。我的堆栈都在同一个服务器上,这就是为什么我不明白这个问题的跨站点性质。或许我理解错了。
我知道有其他类似的线程,但我没有看到任何匹配我的确切设置。
我有一个Amazon AWS EC2 Bitnami MEAN堆栈运行AngularJS站点。我发布了一些信息,我收集了一些Python脚本到mongodb外部,然后我有一个JS API,通过端口3000成功发布集合…据我所知,都很标准。我刚刚学习这项技术,还是个新手。
所以当我去API [URL]:3000/API 在Chrome我看到JSON结果。这不是问题。
当我的Angular站点的控制器试图对API URL执行$http GET操作时,Express会记录并在我的putty控制台中向Bitnami显示我确实击中了API。
但. .当我F12调试时,Chrome在页面上给了我这个甜蜜的错误:
XMLHttpRequest cannot load **URL**. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin **URL**' is therefore not allowed access.
抱歉所有的假url,我是新的stackoverflow,它标记我使用"超过2个url",因为我没有10点。
提前感谢您帮我理解这个问题
这个错误的原因很简单,你正在调用一个单独的API域,而不是你的angular应用程序的服务域。Chrome或其他浏览器通常会抛出CORS错误。
你要做的就是打开你的API,把angular应用运行的域名列入白名单。我不确定它是如何在python中完成的,但在NodeJS中,下面是我要做的。
var cors = require('cors');
corsOptions = {
origin: [
'http://www.127.0.0.1:5555',
'http://www.any-other-site-to-access.com'
],
credentials: true
};
app.use(cors(corsOptions));
对于python,这可能有帮助,但不确定http://enable-cors.org/server_appengine.html
从CORS的文档中,启用所有CORS
var express = require('express')
, cors = require('cors')
, app = express();
app.use(cors());
app.get('/products/:id', function(req, res, next){
res.json({msg: 'This is CORS-enabled for all origins!'});
});
app.listen(80, function(){
console.log('CORS-enabled web server listening on port 80');
});