Meteor Mobile Server на 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())
2 ответа
Это, наверное, самая глупая проблема, с которой я когда-либо сталкивался. Попытка запустить приложение, используя --mobile-server https://myapp.heroku.com
параметр был неверным. Вместо этого должно быть https://myapp.herokuapp.com
Это было это. Это была проблема все время...
Добавление '*' в белый список должно сделать эту работу. Окончательное решение находится в config.xml, это должно быть полезно: /questions/36198047/cors-i-prilozheniya-dlya-telefonnyih-zvonkov/36198067#36198067