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

Express.js项目部署至Vercel遇404错误,求解决方案及数据库集成方法

Express.js 部署到 Vercel 遇到404的解决方案、可行性及数据库集成指南

一、Express.js 能否部署到 Vercel?

能。Vercel 支持部署 Node.js 后端项目,包括 Express.js,但需要遵循 Vercel 的 Serverless Functions(或 Edge Functions)规范——因为 Vercel 默认针对前端静态资源或无服务器函数优化,直接部署传统 Express 服务器会存在适配问题。

二、解决部署后404的问题

本地运行正常但 Vercel 显示404,通常是项目结构或配置不符合 Vercel 要求,以下是核心修复步骤:

1. 适配 Vercel Serverless Functions 规范

Vercel 默认要求后端代码放在 api 目录下,每个文件对应一个接口路由。如果你的 Express 是单文件服务器,需调整结构:

  • 新建 api 文件夹,在其中创建 index.js,将 Express 逻辑适配为无服务器函数格式:
const express = require('express');
const app = express();
const router = express.Router();

// 原有路由逻辑示例
router.get('/', (req, res) => {
  res.send('Hello from Express on Vercel!');
});

router.get('/api/data', (req, res) => {
  res.json({ message: 'Sample data' });
});

app.use('/', router);

// 导出 Vercel 所需的处理函数
module.exports = app;
  • 若使用 ES 模块,需在 package.json 中添加 "type": "module",并改用 export default app; 导出。

2. 自定义路由规则(可选)

若不想使用默认的 api 目录,可在项目根目录创建 vercel.json 配置转发规则,避免路由不匹配:

{
  "rewrites": [
    { "source": "/(.*)", "destination": "/api/index.js" }
  ]
}

该配置会将所有请求转发到 api/index.js 中的 Express 应用处理。

3. 检查依赖与脚本配置

  • 确保 package.json 中包含 Express 依赖,无缺失项:
{
  "dependencies": {
    "express": "^4.18.2"
  }
}
  • 确保 node_modules 在 .gitignore 中,Vercel 部署时会自动安装依赖,无需手动上传。

4. 移除硬编码端口

本地常用固定端口(如3000),但 Vercel 会自动分配端口,需改用环境变量适配:

const port = process.env.PORT || 3000;
// 仅本地运行时监听端口,Vercel 部署时无需此逻辑
if (process.env.NODE_ENV !== 'production') {
  app.listen(port, () => {
    console.log(`Server running on port ${port}`);
  });
}

三、Express.js 集成数据库到 Vercel

Vercel 支持多种数据库方案,以下是常见实现方式:

1. 无服务器数据库(推荐)

  • PlanetScale(MySQL 兼容):在 Vercel 控制台关联 PlanetScale 数据库,获取连接字符串后,用 mysql2 或 sequelize 连接:
const mysql = require('mysql2/promise');

async function getConnection() {
  return mysql.createConnection(process.env.DATABASE_URL);
}

router.get('/api/users', async (req, res) => {
  const conn = await getConnection();
  const [rows] = await conn.query('SELECT * FROM users');
  res.json(rows);
  await conn.end();
});
  • MongoDB Atlas:获取 Atlas 连接字符串,存入 Vercel 环境变量(项目设置→Environment Variables),用 mongoose 连接:
const mongoose = require('mongoose');

mongoose.connect(process.env.MONGODB_URI)
  .then(() => console.log('Connected to MongoDB'))
  .catch(err => console.error(err));

2. Vercel KV(键值数据库)

针对简单键值存储需求,可直接使用 Vercel 官方 KV 服务,启用后通过 SDK 操作:

import { kv } from '@vercel/kv';

router.get('/api/set-key', async (req, res) => {
  await kv.set('test-key', 'hello-vercel');
  res.send('Key set');
});

router.get('/api/get-key', async (req, res) => {
  const value = await kv.get('test-key');
  res.json({ value });
});

3. 核心注意事项

  • 所有数据库连接字符串、密钥必须存入 Vercel 环境变量,禁止硬编码到代码中。
  • 无服务器函数每次调用可能重建连接,建议使用连接池或按需创建连接,避免长时间持有连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:56:03