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
相关产品推荐
相关产品推荐

