У меня есть простой сервер koa, развернутый на Heroku, и я использую XMLHttpRequest для ajax. В моем почтовом запросе я получаю сообщение об ошибке:
Access to XMLHttpRequest at 'https://upload-file-endpoint.herokuapp.com//upload-file' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
сервер.js
const Koa = require('koa');
const Router = require('koa-router');
const cors = require('@koa/cors');
const serve = require('koa-static');
const path = require('path');
const koaBodyMultipart = require('koa-body')({ multipart: true });
var corsOptions = {
origin: '*'
};
const app = new Koa();
app.use(cors(corsOptions));
app.use(serve(path.join(process.env.PWD, '/dist')));
const router = new Router();
router
.post('/upload-file', koaBodyMultipart, (ctx, next) => {
const { file } = ctx.request.files;
if (file) {
ctx.response.body = ctx.request.body;
} else {
ctx.throw(500,'Error Message');
}
})
.post('/upload-file-error', koaBodyMultipart, (ctx, next) => {
ctx.throw(500,'Error Message');
});
app.use(router.routes()).use(router.allowedMethods());
// don't listen to this port if the app is required from a test script
if (!module.parent) {
var server = app.listen(process.env.PORT || 1337);
var port = server.address().port;
console.info('running at port:' + port)
}
почтовый запрос ajax
var file = fileUpl.getFile();
const xhr = new XMLHttpRequest();
xhr.open("POST", "https://upload-file-endpoint.herokuapp.com//upload-file", true);
xhr.setRequestHeader('Access-Control-Allow-Origin', '*');
var formData = new FormData();
formData.append("file", file);
xhr.send(formData);
Я использую библиотеку @коа/корс. Я пытался инициализировать cors с corsOptions и без XMLHttpRequest.
пакет.json
"dependencies": {
"@koa/cors": "^3.0.0",
"koa": "^2.7.0",
"koa-body": "^4.1.0",
"koa-router": "^7.4.0",
"koa-send": "^5.0.0",
"koa-static": "^5.0.0"
},
"devDependencies": {
"nodemon": "^1.19.1"
}
(Кстати, вы действительно, вероятно, не хотите, чтобы код вашего приложения отправлял обратно ошибку 500. Ошибки 5xx в основном предназначены для серверных систем, чтобы отправлять обратно, когда происходит какой-то внутренний сбой сервера, верно? Вы, вероятно, хотите отправлять некоторые соответствующие Вместо этого ошибка 4xx.)
@sideshowbarker эта конечная точка должна возникать, когда сервер не может обработать файл из-за сбоя сервера. Я не знаю почему, но теперь это работает, и я ничего не менял. Я думаю, это потому, что я добавил corsOptions, затем развернул на Heroku и попробовал. Возможно, мне нужно было немного подождать после развертывания.





Когда я пробую это сейчас, это работает. Сервер развернут на Heroku.
я добавил
var corsOptions = {
origin: '*'
};
Наверное, я не дождался, когда его развернули на Heroku.
Каков код состояния HTTP ответа? Используйте панель «Сеть» в инструментах разработки браузера для проверки. Это ошибка 4xx или 5xx, а не успешный ответ 200 OK?