Javascript 仅在put请求时发出CORS飞行前问题

Javascript 仅在put请求时发出CORS飞行前问题,javascript,node.js,express,cors,nodejs-server,Javascript,Node.js,Express,Cors,Nodejs Server,我有一个奇怪的问题。 我在浏览器上收到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-Contro

我有一个奇怪的问题。 我在浏览器上收到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.
下面是我在后端启用cors(nodejs)的代码。所有其他api请求已通过以下代码修复,仅put仍然返回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())
(或尝试处理cors请求的其他代码)的内容放在了您自己的自定义中间件之前的代码中,那么它会妨碍您自己的中间件。删除其他与CORS相关的中间件,以便您的自定义中间件可以不受阻碍地访问传入的请求并完成其工作


请记住,中间件和其他请求处理程序是按照它们注册的顺序运行的,如果给定的处理程序发送响应并且不调用
next()
,那么链中就不会有更多的请求处理程序/中间件对该请求采取行动

您能否显示PUT请求的代码,以便我们可以查看其中的所有内容?我想知道飞行前选项是否不接受访问控制允许原点:(您需要列出明确的请求原点)?我似乎记得曾经读过一些关于这方面的文章,但我还没有找到一个这样的参考文献。我确实找到了一个引用,上面说
访问控制允许源代码:
对于“已认证的请求”是不可接受的,但我还不确定是什么使请求获得认证。您是否随请求一起发送cookie?如果是这样的话,这将使其具有凭据,并且您可能还需要
访问控制允许凭据:true
@jfriend00谢谢Jeff,我试图忽略访问控制允许来源:*on选项,但相同result@jfriend00添加了相同的问题:访问控制允许凭据:true