ฉันขอเริ่มด้วยการบอกว่าฉันพบวิธีแก้ปัญหาที่นำเสนอทางออนไลน์แล้ว แต่ดูเหมือนจะไม่มีวิธีใดที่เหมาะกับฉันเลย
ปัญหา:
ฉันมีแอป 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())