MERN项目部署后CORS报错:access-token请求头不被预检响应允许如何解决
问题根因
报错明确提示请求头access-token未被后端CORS配置的Access-Control-Allow-Headers字段允许,你当前的CORS配置里只列了Origin、X-Requested-With、Content-Type、Accept、Authorization,缺少自定义头access-token,且未对OPTIONS预检请求做特殊处理,所以配置不生效。
修复方案
方案1:直接修改你现有的自定义CORS中间件
调整代码如下:
// cors middleware app.use(function (req, res, next) { // 如果前端请求带身份凭证,这里不要写*,替换为你的前端域名:https://angry-hamilton-41dfa7.netlify.app res.header("Access-Control-Allow-Origin", "*"); // 新增access-token到允许的请求头列表 res.header( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization, access-token", ); res.header( "Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, PATCH, DELETE", ); // 处理OPTIONS预检请求,直接返回200 if (req.method === 'OPTIONS') { return res.sendStatus(200); } next(); });
方案2:使用官方cors包(更稳定,避免手写配置出错)
- 安装依赖:
npm install cors
- 在server.js中引入配置:
const cors = require('cors'); // 配置CORS app.use(cors({ // 允许的前端域名,生产环境不要用* origin: "https://angry-hamilton-41dfa7.netlify.app", // 允许的请求头,包含你自定义的access-token allowedHeaders: ["Origin", "X-Requested-With", "Content-Type", "Accept", "Authorization", "access-token"], // 允许的请求方法 methods: ["GET", "POST", "OPTIONS", "PUT", "PATCH", "DELETE"] }));
验证步骤
修改代码后重新部署到Heroku,清除浏览器缓存后再次发起请求即可恢复正常。
内容的提问来源于stack exchange,提问作者Shoubhik Raj
相关产品推荐
相关产品推荐

