仅 put 请求的 CORS 预检问题

CORS preflight issue on only put request

我有一个奇怪的问题。 我在浏览器上收到 put 请求的 cors 错误:

Access to fetch at 'http://localhost:3015/pathtest/api/v1/results/cc7637578fad1a6fcfb4249fbf000a13/load' from origin 'https://localhost:9444' has been blocked by CORS policy: Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.

这是我在后端 (nodejs) 中启用 cors 的代码。所有其他 api 请求都已使用以下代码修复,并且只提出 returns cors 问题:

app.use(function(req, res, next) {
  // res.header("Access-Control-Allow-Origin", "*");
  // res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  // res.header('Access-Control-Allow-Methods', 'PATCH, PUT, POST, GET, DELETE, OPTIONS');
  //     // allow preflight
  //     if (req.method === 'OPTIONS') {
  //       res.send(200);
  //   } else {
  //       next();
  //   }

  res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,PATCH,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
// allow preflight
if (req.method === 'OPTIONS') {
    res.send(200);
} else {
    next();
}
});

我错过了什么吗?

**更新

根据我们通过评论进行的两次调查,我们发现这就是您遇到问题的原因...

您显示的屏幕截图说明您在问题中显示的中间件代码未处理该请求。这显然意味着你在它之前有一些其他的中间件正在接管请求,而那个中间件没有做你想要的,所以它妨碍了你想要处理请求的中间件。

如果您在寻找解决方案时将 app.use(cors()) 之类的东西(或其他一些尝试处理 COR 请求的代码)放入您的代码中,并且在您自己的自定义中间件之前,那么它妨碍你自己的中间件。删除其他与 CORS 相关的中间件,以便您的自定义中间件可以不受阻碍地访问传入请求并完成其工作。

请记住,中间件和其他请求处理程序按它们注册的顺序排列 运行,如果给定的处理程序发送响应但不调用 next(),则不再请求 handlers/middleware 在链中将根据该请求采取行动。