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

Vercel部署Express Node.js项目遭遇404 NOT_FOUND错误求助

Vercel部署Express项目出现404 NOT_FOUND错误的解决方法

你遇到的问题是几个关键配置和代码错误导致的,按以下步骤修复即可:

问题根源

  1. 入口文件不匹配:vercel.json里配置的启动文件是app.js,但你的实际入口文件是index.js,Vercel找不到正确的启动文件。
  2. Serverless环境不兼容:Vercel是Serverless平台,不能用app.listen()自行启动服务器,必须导出Express实例让Vercel托管。
  3. 变量覆盖bug:index.js里错误引入const res = require('express/lib/response');,直接覆盖了路由回调中的响应对象res,会导致响应逻辑异常。
  4. 路由规则错误:vercel.json的dest: "/"无法把请求正确转发到Express处理。

修复步骤

1. 修正vercel.json配置

将入口文件改为实际的index.js,同时调整路由规则指向正确的处理文件:

{
    "version": 2,
    "builds": [
        {
            "src": "./index.js",
            "use": "@vercel/node"
        }
    ],
    "routes": [
        {
            "src": "/(.*)",
            "dest": "/index.js"
        }
    ]
}

2. 调整index.js代码

  • 删除无用的constants和express/lib/response引入
  • 移除app.listen(),改为导出Express实例
  • 优化路径拼接(去掉开头斜杠,避免路径解析问题)

修改后的index.js:

const express = require('express');
const app = express();
const path = require('path');

app.get("/", (req, res) => {
    res.sendFile(path.join(__dirname, "views", "index.html"));
});

app.get("/register", (req, res) => {
    res.sendFile(path.join(__dirname, "views", "register.html"));
});

app.get("/login", (req, res) => {
    res.sendFile(path.join(__dirname, "views", "login.html"));
});

app.use(express.static(path.join(__dirname, "public")));

// 导出app供Vercel托管使用
module.exports = app;

3. 最后检查项

  • 确认package.json中包含express依赖,重新执行npm install确保依赖完整
  • 核对目录结构,确保views和public文件夹位于项目根目录,内部文件存在:
项目根目录
├── index.js
├── vercel.json
├── package.json
├── views/
│   ├── index.html
│   ├── register.html
│   └── login.html
└── public/
    └── 静态资源文件(如css、js、图片)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:35:47