首先让我说我在网上找到了几个建议的解决方案,但它们似乎都不适合我。
问题:
我有一个我正在尝试在 android 上运行的流星应用程序。为此,我在 Heroku 上部署了应用程序,并使用参数调用run android-device
命令。--mobile-server https://myapp.heroku.com
我永久收到错误
"XMLHttpRequest cannot load https://myapp.heroku.com/sockjs/... . No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:12848' is therefore not allowed access. The response had HTTP status code 404.", source: http://localhost:12848/ (0)
这是我迄今为止尝试过的:
我在流星启动时设置了 ROOT URL:
process.env.ROOT_URL = "https://myapp.heroku.com";
我尝试在流星启动时设置这样的访问控制,服务器端:
WebApp.connectHandlers.use(function(req, res, next) {
res.setHeader("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, OPTIONS');
res.header('Access-Control-Allow-Origin', 'http://localhost:3000');
res.header('Access-Control-Allow-Origin', 'https://myapp.heroku.com');
res.header('Access-Control-Allow-Origin', 'http://localhost:12848');
res.header('Access-Control-Allow-Origin', 'http://meteor.local');
res.header("Access-Control-Allow-Headers", "Content-type,Accept,X-Custom-Header");
return next();
});
我尝试在流星启动时在服务器端使用浏览器策略包,如下所示:
BrowserPolicy.content.allowSameOriginForAll();
BrowserPolicy.content.allowOriginForAll('*');
BrowserPolicy.content.allowOriginForAll('http://meteor.local');
BrowserPolicy.content.allowOriginForAll('https://myapp.heroku.com');
BrowserPolicy.content.allowOriginForAll('https://*.myapp.heroku.com');
BrowserPolicy.content.allowEval();
我尝试将访问规则添加到“mobile-config.js”:
App.accessRule("*");
我确保根目录下的“package.json”文件中的名称与“mobile-config.js”下的应用程序名称相同
我还缺少什么?
编辑:
我还尝试将 express 和 cors 包添加到白名单本地主机:
var whitelist = [
'http://localhost:3000',
'http://localhost:12848',
'https://myapp.heroku.com'
];
var corsOptions = {
origin: function(origin, callback){
var originIsWhitelisted = whitelist.indexOf(origin) !== -1;
callback(null, originIsWhitelisted);
},
credentials: true
};
app.use(cors(corsOptions));
还尝试启用飞行前,如下所示:
app.options('*', cors())