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

将MERN栈服务器部署到Vercel后出现CORS错误,如何解决?

解决Vercel部署MERN服务器后的CORS错误

问题分析

你遇到的CORS错误源于服务器响应缺少正确的Access-Control-Allow-Origin头,同时代码存在重复的CORS配置,客户端还错误设置了仅服务器需返回的响应头,这些因素导致预检请求失败。

解决方案步骤

1. 修正客户端请求代码

客户端无需设置Access-Control-Allow-Origin头(这是服务器返回给浏览器的响应头),直接移除该配置:

fetch('https://blood-management-server.vercel.app/donor', {
    method: 'POST',
    headers: {
        'content-type': 'application/json'
    },
    body: JSON.stringify(donor)
})

2. 清理服务器端重复的CORS配置

服务器同时使用了cors包和自定义res.header中间件,两者会产生冲突,保留cors包的配置即可(它能自动规范处理预检请求):

const express = require("express");
const { MongoClient, ServerApiVersion } = require("mongodb");
const cors = require("cors");
require("dotenv").config();

const app = express();
const port = process.env.PORT || 5000;

//Middleware
const corsOptions = {
  origin: "https://bloodcare-bangladesh.web.app",
  methods: ["GET", "POST"],
  allowedHeaders: ["Content-Type"],
};
// 仅保留cors包的中间件配置
app.use(cors(corsOptions));
app.use(express.json());

// 移除以下自定义CORS中间件,避免冲突
// app.use((req, res, next) => {
//   res.header('Access-Control-Allow-Origin', 'https://bloodcare-bangladesh.web.app');
//   res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
//   next();
// });

// 剩余MongoDB连接和路由代码保持不变...

3. 确认Vercel环境变量配置

本地.env文件不会同步到Vercel,需在Vercel项目的Settings > Environment Variables中手动添加:

  • BD_USER: MongoDB用户名
  • DB_PASS: MongoDB密码

4. 验证部署

重新部署服务器到Vercel后:

  • 先用Postman测试POST /donor接口,确认能正常返回数据
  • 再在客户端测试注册功能,检查CORS错误是否消失

内容的提问来源于stack exchange,提问作者Md Ahad Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:45:25