部署含GET/POST接口的后端服务遇CORS及部署崩溃问题求助
后端部署问题与解决方案
问题描述
开发了一个包含1个GET和1个POST接口的小型后端服务,部署时遇到两个问题:
- 部署到Railway后服务直接崩溃
- 部署到Vercel后前端无法接收请求,触发CORS报错
CORS报错信息
Access to fetch at 'https://auth-backend-livid.vercel.app/serial' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
代码片段
server.js
const mongoose = require('mongoose'); const dotenv = require('dotenv'); const app = require('./app'); dotenv.config({ path: './config.env' }); const dbAtlasLink = process.env.DB_LINK.replace('<db_password>', process.env.DB_PASSWORD); mongoose.connect(dbAtlasLink); const portNo = process.env.PORT || 8080; app.listen(portNo);
app.js
const express = require('express'); const cors = require('cors'); const serialRouter = require('./routes/serial.router'); const app = express(); app.use(express.json()); app.use(cors({ origin: '*', methods: '*', allowedHeaders: '*' })); app.options('*', cors()); app.use('/serial', serialRouter); app.get('/', (req, res) => { res.send('API running'); }); module.exports = app;
解决方法
一、Vercel部署问题(含CORS修复)
Vercel是Serverless环境,不能用app.listen()启动服务,需按以下步骤调整:
- 修改
server.js,仅在本地开发时监听端口,生产环境导出app:
const mongoose = require('mongoose'); const dotenv = require('dotenv'); const app = require('./app'); dotenv.config({ path: './config.env' }); const dbAtlasLink = process.env.DB_LINK.replace('<db_password>', process.env.DB_PASSWORD); mongoose.connect(dbAtlasLink) .then(() => console.log('数据库连接成功')) .catch(err => console.log('数据库连接失败:', err)); // 仅本地运行时启动服务 if (process.env.NODE_ENV !== 'production') { const portNo = process.env.PORT || 8080; app.listen(portNo, () => { console.log(`服务运行在端口 ${portNo}`); }); } module.exports = app;
- 在项目根目录创建
vercel.json配置文件,指定Vercel构建规则:
{ "builds": [ { "src": "server.js", "use": "@vercel/node" } ], "routes": [ { "src": "/(.*)", "dest": "server.js" } ] }
部署后,原本的CORS配置会正常生效,服务也能正确处理前端请求。
二、Railway崩溃问题
崩溃大概率由数据库连接失败导致,按以下步骤排查:
- 查看Railway控制台的服务日志,获取具体错误信息
- 检查MongoDB Atlas的IP白名单,添加
0.0.0.0/0(允许所有IP访问),或添加Railway的出站IP - 确认Railway的环境变量
DB_LINK和DB_PASSWORD配置正确,无拼写错误 - 给mongoose连接添加错误捕获(如上面修改后的server.js),方便快速定位问题
内容的提问来源于stack exchange,提问作者ahmad fakher
相关产品推荐
相关产品推荐

