You need to enable JavaScript to run this app. Express.js访问无效POST/PATCH REST端点触发CORS错误问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Express.js访问无效POST/PATCH REST端点触发CORS错误问题咨询

问题原因
  • POST、PATCH请求携带Content-Type: application/json请求头,不属于CORS简单请求范畴,浏览器会自动先发送OPTIONS类型的预检请求,要求服务端必须返回2xx状态码且携带正确CORS响应头,预检通过后才会发送实际业务请求。
  • 你当前仅配置了CORS响应头,未单独处理OPTIONS请求:所有OPTIONS请求会和普通请求一样进入后续路由匹配流程,由于你的业务路由都只处理GET/POST/PATCH等业务方法,没有匹配的OPTIONS路由,最终会走到404中间件返回404状态码,不符合预检请求的要求,因此触发CORS错误。
  • GET请求属于CORS简单请求,不需要发送预检请求,哪怕端点无效返回404,只要响应头携带正确CORS配置,前端就能正常拿到响应,不会触发CORS错误。
解决方案

修改全局CORS中间件,单独处理OPTIONS预检请求,匹配到OPTIONS方法后直接返回200状态即可,无需走后续路由逻辑,修改后的代码如下:

app.use((req, res, next) => {
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS");
  res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
  // 新增OPTIONS请求处理逻辑
  if (req.method === 'OPTIONS') {
    return res.sendStatus(200);
  }
  next();
});

修改后所有OPTIONS预检请求会直接返回200状态,预检通过后,无效POST/PATCH请求会正常走到404中间件,返回携带CORS头的404响应,前端可以正常拿到你定义的错误信息,不会再触发CORS错误。

内容的提问来源于stack exchange,提问作者Mitanshu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 21:27:02