Мобильный сервер Meteor на Heroku - отсутствует заголовок Access-Control-Allow-Origin

Позвольте мне начать с того, что я нашел несколько предложенных решений в Интернете, но ни одно из них, похоже, не работает для меня.

Проблема:

У меня есть метеорное приложение, которое я пытаюсь запустить на 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())

person Cos    schedule 22.07.2017    source источник
comment
Вы убедились, что ресурс, к которому вы пытаетесь получить доступ, действительно существует? (сосредоточившись на задней части сообщения об ошибке, которое дает отчет 404)   -  person elk    schedule 25.07.2017
comment
Ну, клиент в приложении загружает все, что находится на стороне клиента, но ничего с сервера. Другой клиент (который на хероку вместе с сервером) грузит все нормально. Так что я бы сказал да на это.   -  person Cos    schedule 26.07.2017


Ответы (2)


Это, наверное, самая глупая проблема, с которой я когда-либо сталкивался. Попытка запустить приложение с использованием параметра --mobile-server https://myapp.heroku.com была ошибочной. Вместо этого должно быть https://myapp.herokuapp.com

Вот оно. Это была проблема все время...

person Cos    schedule 28.07.2017
comment
Ну... :D Я бы не сказал, что говорил вам об этом, но... ;-) спасибо за публикацию ответа. Это может спасти других людей от серьезных головных болей. - person elk; 29.07.2017

Добавление «*» в белый список должно помочь. Окончательное решение находится в config.xml, это должно быть полезно: https://stackoverflow.com/a/36124935/8056323

person V. Flyson    schedule 25.07.2017
comment
Согласно первому ответу здесь stackoverflow.com/questions/29279287/ и документацию здесь guide.meteor.com/mobile.html#domain-whitelisting , я уже сделал это на этапе добавления правил доступа к mobile-config.js следующим образом: App.accessRule (*); - person Cos; 26.07.2017