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

部署含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()启动服务,需按以下步骤调整:

  1. 修改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;
  1. 在项目根目录创建vercel.json配置文件,指定Vercel构建规则:
{
  "builds": [
    {
      "src": "server.js",
      "use": "@vercel/node"
    }
  ],
  "routes": [
    {
      "src": "/(.*)",
      "dest": "server.js"
    }
  ]
}

部署后,原本的CORS配置会正常生效,服务也能正确处理前端请求。

二、Railway崩溃问题

崩溃大概率由数据库连接失败导致,按以下步骤排查:

  1. 查看Railway控制台的服务日志,获取具体错误信息
  2. 检查MongoDB Atlas的IP白名单,添加0.0.0.0/0(允许所有IP访问),或添加Railway的出站IP
  3. 确认Railway的环境变量DB_LINK和DB_PASSWORD配置正确,无拼写错误
  4. 给mongoose连接添加错误捕获(如上面修改后的server.js),方便快速定位问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 23:34:54