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

部署Node.js+Express服务至Heroku后遭遇CORS预请求失败问题求助

解决Heroku上Express服务的CORS预检错误问题

看起来你的问题出在几个核心点上:CORS配置冲突、OPTIONS预检请求未被正确响应,还有Heroku端口设置不符合平台要求,我来一步步帮你解决:

1. 先修复Heroku端口配置

Heroku会为应用分配动态端口,不能硬编码3030,必须读取平台提供的环境变量端口:

app.listen(process.env.PORT || 3030, () => {
  console.log('server is running');
});

这是基础前提,端口配置错误会导致服务在Heroku上无法正常启动,间接引发预检请求返回错误状态。

2. 移除重复CORS配置,避免头信息冲突

你同时使用了cors()中间件和手动设置CORS头的自定义中间件,这会导致响应头混乱,反而触发CORS规则校验失败。直接删掉手动设置头的代码,只保留cors()并按需配置:

import './db/mongoose';
import HttpError from './model/http-error';
import cors from 'cors';
import { Request, Response, NextFunction } from 'express'; // 记得导入express的类型
import authRoutes from './routes/auth.router';
import productRouter from './routes/product.router';

const app = express();

// 仅保留cors中间件,它会自动处理所有CORS逻辑,包括OPTIONS预检
app.use(cors({
  allowedHeaders: ['Origin', 'X-Requested-With', 'Content-Type', 'Accept', 'Authorization', 'AuthorizationRefresh', 'user'],
  methods: ['OPTIONS', 'GET', 'POST', 'PATCH', 'DELETE']
}));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));

// 删掉原来手动设置CORS头的那段中间件代码

app.use('/auth', authRoutes);
app.use('/products', productRouter);

app.use((req, res, next) => {
  throw new HttpError('couldnt find this route', 404);
});

app.use((error: any, req: Request, res: Response, next: NextFunction) => {
  if (res.headersSent) {
    return next(error);
  }
  res.status(error.code || 500);
  res.json({ message: error.message || 'an unknown error occurred' });
});

app.listen(process.env.PORT || 3030, () => {
  console.log('server is running');
});

cors()包会自动处理OPTIONS预检请求,返回符合要求的200/204状态,这正是你当前缺失的关键响应。

3. 额外保障:确保OPTIONS请求不被404中间件拦截

虽然cors()放在最前面会优先处理OPTIONS请求,但如果还是有问题,可以专门给所有路由的OPTIONS请求加兜底处理:

// 放在cors中间件之后、路由之前
app.options('*', cors());

最后:重新部署到Heroku

修改完成后,提交代码并重新部署:

git add .
git commit -m "fix cors and heroku port issues"
git push heroku main

这样调整后,预检请求会被cors()包正确响应,CORS头也不会出现冲突,端口也符合Heroku的要求,应该就能解决你遇到的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:18:14