Node.js 膝关节炎和髋关节炎XMLHttpRequest:No';访问控制允许原点';请求的资源上存在标头 我在HeloCU上部署了简单的膝关节炎服务器,并使用Agax的 XMLHttpRequest 。在我的post请求中,我收到错误消息: 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.

Node.js 膝关节炎和髋关节炎XMLHttpRequest:No';访问控制允许原点';请求的资源上存在标头 我在HeloCU上部署了简单的膝关节炎服务器,并使用Agax的 XMLHttpRequest 。在我的post请求中,我收到错误消息: 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.,node.js,ajax,cors,xmlhttprequest,koa,Node.js,Ajax,Cors,Xmlhttprequest,Koa,server.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

server.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.log('running at port:' + port)
}
ajax post请求

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);
我正在使用图书馆。我尝试使用和不使用
corsOptions
初始化
cors

package.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"
  }

当我现在尝试的时候,它是有效的。服务器部署在Heroku上

我补充说

var corsOptions = {
  origin: '*'
};

当它部署到Heroku上时,我可能没有等待。

响应的HTTP状态码是什么?使用浏览器devtools中的网络窗格进行检查。是4xx还是5xx错误,而不是200 OK成功响应?(顺便说一句,您可能真的不想让应用程序代码发回500个错误。5xx错误基本上是为了服务器系统在出现内部服务器故障时发回的,对吗?您可能想改为发送一些适当的4xx错误。)@sideshowbarker此终结点是指当服务器由于服务器故障而无法处理文件时出现的。我不知道为什么,但它现在可以工作,我没有做任何更改。我想这是因为我添加了
corsOptions
,然后在Heroku上部署并试用了它。也许部署后我需要等待一段时间。