Vercel部署Express Node.js项目遭遇404 NOT_FOUND错误求助
Vercel部署Express项目出现404 NOT_FOUND错误的解决方法
你遇到的问题是几个关键配置和代码错误导致的,按以下步骤修复即可:
问题根源
- 入口文件不匹配:vercel.json里配置的启动文件是
app.js,但你的实际入口文件是index.js,Vercel找不到正确的启动文件。 - Serverless环境不兼容:Vercel是Serverless平台,不能用
app.listen()自行启动服务器,必须导出Express实例让Vercel托管。 - 变量覆盖bug:index.js里错误引入
const res = require('express/lib/response');,直接覆盖了路由回调中的响应对象res,会导致响应逻辑异常。 - 路由规则错误: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
相关产品推荐
相关产品推荐

