部署MERN后端至Vercel时出现404 NOT_FOUND错误求助
MERN后端部署Vercel出现404 NOT_FOUND错误解决
部署MERN应用后端到Vercel时遇到以下错误:
404: NOT_FOUND Code: NOT_FOUND ID: cdg1::bbhc7-1691147707623-efc5cd10ff98
我的server.js代码
require("dotenv").config(); const express = require("express"); const mongoose = require("mongoose"); const cors = require("cors"); const cookieParser = require("cookie-parser"); const SocketServer = require("./socketServer"); const app = express(); app.use(express.json()); app.use(cors()); app.use(cookieParser()); // Socket const http = require('http').createServer(app); const io = require("socket.io")(http); io.on("connection", socket => { SocketServer(socket); }); app.use("/api", require('./routes/authRouter')); app.use("/api", require('./routes/userRouter')); app.use("/api", require('./routes/postRouter')); app.use("/api", require('./routes/commentRouter')); const URI = process.env.MONGODB_URL; mongoose .connect(URI, { useNewUrlParser: true, useUnifiedTopology: true, }) .then(() => { console.log("Connected successfully to MongoDB"); }) .catch((err) => { console.error("Error connecting to MongoDB", err); }); const port = process.env.PORT || 5000; http.listen(port, () => { console.log("Server is running on port: ", port); });
package.json脚本配置
"scripts": { "dev": "nodemon server.js" },
问题原因及解决步骤
1. 补充start启动脚本
Vercel部署Node.js应用默认执行npm start启动服务,但你的脚本里仅配置了开发环境的dev命令。修改package.json:
"scripts": { "dev": "nodemon server.js", "start": "node server.js" }
2. 添加Vercel专属配置文件
在项目根目录创建vercel.json,明确路由规则和服务入口:
{ "version": 2, "builds": [ { "src": "server.js", "use": "@vercel/node" } ], "routes": [ { "src": "/api/(.*)", "dest": "/server.js" } ] }
该配置会将所有/api开头的请求转发至server.js处理,同时指定使用Vercel的Node运行环境构建服务。
3. Socket.io兼容性说明
Vercel的Serverless Functions不支持WebSocket连接,若依赖Socket.io的实时功能,需调整方案:
- 改用Vercel Edge Functions配合Server-Sent Events等替代方案
- 将Socket服务单独部署到支持WebSocket的平台(如Render、Heroku),与Vercel后端分离
4. 检查环境变量配置
确保在Vercel控制台的项目设置中,正确添加MONGODB_URL等所需环境变量,避免因数据库连接失败导致服务无法正常启动。
内容的提问来源于stack exchange,提问作者Yanis Saadi
相关产品推荐
相关产品推荐

