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

React对接Node.js接口出现CORS策略错误,配置cors包仍无效如何解决

问题根因
  • CORS中间件仅绑定了根路径/的GET路由,你实际访问的/api/table、/api/users/create等业务接口未应用任何CORS配置,响应头自然不会返回Access-Control-Allow-Origin字段
  • 非简单请求(比如带JSON body的POST请求)会先发送OPTIONS类型的预检请求,你当前没有处理该类请求的CORS逻辑,导致预检直接被拦截
  • 你用cURL测试的是根路径/,和实际业务请求的路径不匹配,所以测试结果不能代表业务接口的配置状态
修复方案

将CORS中间件改为全局注册,且必须放在所有其他中间件、业务路由之前,修改后代码参考如下:

const express = require('express');
const app = express();
const cors = require('cors');

var corsOptions = {
  origin: 'https://idcapex-web-suprimentos-dev.apps.rosa-gerdau.bxnu.p1.openshiftapps.com',
  optionsSuccessStatus: 200,
  // 如果你用到自定义请求头或者特殊请求方法,可以补充以下配置
  // allowedHeaders: ['Content-Type', 'Authorization'],
  // methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']
}

// 重点:全局注册CORS中间件,放在最前面
app.use(cors(corsOptions))

// 后续注册其他中间件
app.use(express.json({limit: '50mb'}));
app.use(express.urlencoded({limit: '50mb'}));
// 可删除重复的express.json()注册,前面已经配置过带limit参数的版本

// 业务路由不需要再加单独的cors参数,已经全局生效
app.get('/', function (req, res, next) {
  res.json({
    msg: 'This is CORS-enabled for only https://idcapex-web-suprimentos-dev.apps.rosa-gerdau.bxnu.p1.openshiftapps.com.'
  })
})

// 你的其他业务路由(/api/table、/api/users/create等)正常写在后面即可

修复完成后可以用cURL测试实际业务接口的预检请求验证配置是否生效,示例命令:

curl -H "Access-Control-Request-Method: POST" -H "Origin: https://idcapex-web-suprimentos-dev.apps.rosa-gerdau.bxnu.p1.openshiftapps.com" -X OPTIONS --head https://idcapex-api-suprimentos-dev.apps.rosa-gerdau.bxnu.p1.openshiftapps.com/api/users/create

如果响应头中包含access-control-allow-origin字段即代表配置正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 17:24:08