Meteor Mobile Server บน Heroku - ไม่มีส่วนหัวของ Access-Control-Allow-Origin

ฉันขอเริ่มด้วยการบอกว่าฉันพบวิธีแก้ปัญหาที่นำเสนอทางออนไลน์แล้ว แต่ดูเหมือนจะไม่มีวิธีใดที่เหมาะกับฉันเลย

ปัญหา:

ฉันมีแอป meeor ที่ฉันพยายามเรียกใช้บน 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();
  });

ฉันพยายามใช้แพ็คเกจนโยบายเบราว์เซอร์เช่นนี้ฝั่งเซิร์ฟเวอร์เมื่อเริ่มต้นระบบ 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();

ฉันพยายามเพิ่มกฎการเข้าถึงใน "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
ไคลเอนต์ในแอปจะโหลดทุกอย่างที่เป็นฝั่งไคลเอ็นต์ แต่ไม่มีสิ่งใดจากเซิร์ฟเวอร์ ไคลเอนต์อื่น (ซึ่งอยู่บน heroku ร่วมกับเซิร์ฟเวอร์) โหลดทุกอย่างได้ดี ดังนั้นฉันจะตอบว่าใช่   -  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