Server Seluler Meteor di Heroku - Tidak ada header Access-Control-Allow-Origin

Mari saya mulai dengan mengatakan saya telah menemukan beberapa solusi yang diusulkan secara online, namun tampaknya tidak ada satupun yang berhasil untuk saya.

Masalah:

Saya memiliki aplikasi meteor yang saya coba jalankan di Android. Untuk ini, saya telah menerapkan aplikasi di Heroku dan memanggil perintah run android-device menggunakan parameter --mobile-server https://myapp.heroku.com.

Saya menerima kesalahan secara permanen

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

Inilah yang telah saya coba sejauh ini:

Saya menetapkan URL ROOT saat startup meteor:

  process.env.ROOT_URL = "https://myapp.heroku.com";  

Saya mencoba mengatur Kontrol Akses seperti ini, di sisi server saat startup meteor:

  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();
  });

Saya mencoba menggunakan paket kebijakan browser, seperti ini, di sisi server saat startup meteor:

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

Saya mencoba menambahkan aturan akses ke "mobile-config.js":

App.accessRule("*");

Saya memastikan nama dalam file "package.json" di bawah root sama dengan nama Aplikasi di bawah "mobile-config.js"

Apa lagi yang saya lewatkan?

Sunting:

Saya juga mencoba menambahkan paket express dan cors ke daftar putih host lokal:

  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));

Juga mencoba mengaktifkan pra-penerbangan, seperti ini:

app.options('*', cors())

person Cos    schedule 22.07.2017    source sumber
comment
Apakah Anda memastikan bahwa sumber daya yang Anda coba akses benar-benar ada? (fokus pada bagian belakang pesan kesalahan yang memberikan laporan 404)   -  person elk    schedule 25.07.2017
comment
Ya, klien di aplikasi memuat semua yang ada di sisi klien, tetapi tidak ada apa pun dari server. Klien lain (yang ada di heroku, bersama dengan server) memuat semuanya dengan baik. Jadi saya akan mengatakan ya untuk itu.   -  person Cos    schedule 26.07.2017


Jawaban (2)


Ini mungkin masalah paling bodoh yang pernah saya hadapi. Mencoba menjalankan aplikasi menggunakan parameter --mobile-server https://myapp.heroku.com ternyata salah. Sebaliknya, seharusnya https://myapp.herokuapp.com

Itu saja. itulah masalahnya selama ini...

person Cos    schedule 28.07.2017
comment
Ya... :D Saya tidak akan mengatakan saya sudah bilang begitu tapi... ;-) terima kasih telah mengirimkan jawabannya. Ini mungkin menyelamatkan orang lain dari sakit kepala parah. - person elk; 29.07.2017

Menambahkan '*' ke daftar putih seharusnya berhasil. Solusi utamanya terletak pada config.xml, ini akan membantu: https://stackoverflow.com/a/36124935/8056323

person V. Flyson    schedule 25.07.2017
comment
Menurut jawaban pertama di sini stackoverflow.com/questions/29279287/ dan dokumentasinya di sini guide.meteor.com/mobile.html#domain-whitelisting , saya sudah melakukan ini pada langkah di mana saya menambahkan aturan akses ke mobile-config.js seperti ini: App.accessRule (*); - person Cos; 26.07.2017