You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js API跨域求助:Fetch API调用持续出现CORS错误

问题原因与解决方案

问题出在服务端的CORS配置冲突,你的代码同时混用了cors包和手动设置响应头的方式,还重复注册了cors中间件,导致CORS头部不符合浏览器的校验规则。

具体问题点:

  • 先调用app.use(cors())后,又在自定义中间件里再次调用app.use(cors()),重复注册中间件会造成响应头混乱。
  • 手动设置res.header的操作和cors包的自动头部设置冲突,浏览器收到重复或不规范的CORS头部时,会判定跨域请求不合法。

修正方案(二选一即可):

方案1:仅使用cors包配置(推荐)

删除手动设置响应头的中间件,直接通过cors包的配置项定义规则,避免冲突:

const cors = require('cors');

// 明确配置允许的源和请求方法
app.use(cors({
  origin: '*',
  methods: ['GET', 'PUT', 'POST', 'DELETE']
}));

方案2:手动设置CORS头部(不用cors包)

如果不想用cors包,就删除所有app.use(cors())调用,保留自定义中间件并完善预检请求处理:

app.use((req, res, next) => {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Methods", 'GET,PUT,POST,DELETE');
  
  // 处理浏览器的OPTIONS预检请求(必须,否则复杂请求会失败)
  if (req.method === 'OPTIONS') {
    return res.sendStatus(200);
  }
  
  next();
});

客户端代码说明

你的客户端Fetch代码没有问题,不过GET请求里设置Content-Type: application/json不是必须的,可以去掉,但这不是导致CORS错误的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:01:12