【问题标题】:Meteor Mobile Server on Heroku - No Access-Control-Allow-Origin header is presentHeroku 上的 Meteor 移动服务器 - 不存在 Access-Control-Allow-Origin 标头
【发布时间】:2017-12-28 10:34:54
【问题描述】:

首先,我在网上找到了几个建议的解决方案,但似乎没有一个适合我。

问题:

我有一个我正在尝试在 android 上运行的流星应用程序。为此,我在 Heroku 上部署了应用程序,并使用 --mobile-server https://myapp.heroku.com 参数调用了 run android-device 命令。

我永久收到错误

"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())

【问题讨论】:

  • 您确定您尝试访问的资源确实存在吗? (重点是给出 404 报告的错误消息的后部)
  • 嗯,应用程序上的客户端会加载客户端的所有内容,但不会从服务器加载任何内容。另一个客户端(与服务器一起在 heroku 上)加载一切正常。所以我会同意。

标签: android meteor heroku cors meteor-mobile


【解决方案1】:

将“*”添加到白名单应该可以完成这项工作。最终解决方案在 config.xml 中,这应该会有所帮助:https://stackoverflow.com/a/36124935/8056323

【讨论】:

【解决方案2】:

这可能是我遇到过的最愚蠢的问题。尝试使用 --mobile-server https://myapp.heroku.com 参数运行应用程序是错误的。相反,它应该是https://myapp.herokuapp.com

就是这样。一直都是这个问题……

【讨论】:

  • 嗯... :D 我不会说我告诉过你但是... ;-) 感谢您发布答案。这可能会使其他人免于头痛。
猜你喜欢
  • 2020-10-18
  • 2021-05-05
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 2021-10-11
  • 2014-05-05
  • 2018-10-28
  • 2016-03-10
相关资源
最近更新 更多