部署至Vercel后API函数超时及路由无法访问问题求助
Node.js API部署Vercel后的路由访问异常问题
问题描述
将Node.js API部署至Vercel后,先出现API函数超时问题,按照官方文档调整项目结构后,根路由/可正常返回内容,但其余所有子路由均提示无法找到,已严格遵循部署指南操作仍未解决。
相关代码
api/index.js
import authRoutes from "../routes/authRoute.js" import userRoutes from "../routes/userRoute.js" import productRoutes from "../routes/productRoute.js" import orderRoutes from "../routes/orderRoute.js" const corsOptions = { origin: ["http://localhost:5173/"], methods: ["POST", "GET", "PUT"], credentials: true } app.use(cors(corsOptions)) app.get('/', (req, res) => { res.send("Hello from Node API server!"); }); app.use("api/v1/auth", authRoutes) app.use("api/v1/user", userRoutes) app.use("api/v1/product", productRoutes) app.use("api/v1/order", orderRoutes)
vercel.json
{ "version": 2, "rewrites": [{ "source": "/(.*)", "destination": "/api" }] }
问题排查与解决
1. 修复路由挂载路径错误
代码中所有子路由的挂载路径缺少开头的斜杠/,导致Express会将路径相对于当前路由前缀拼接,无法正确匹配请求路径。
修正后的路由挂载代码:
app.use("/api/v1/auth", authRoutes) app.use("/api/v1/user", userRoutes) app.use("/api/v1/product", productRoutes) app.use("/api/v1/order", orderRoutes)
2. 适配生产环境的CORS配置
当前CORS配置仅允许localhost:5173访问,部署到Vercel后需替换为生产环境的前端域名(如你的Vercel前端项目域名),否则会出现跨域问题影响路由访问:
const corsOptions = { origin: ["https://your-frontend-domain.vercel.app"], // 替换为实际前端域名 methods: ["POST", "GET", "PUT"], credentials: true }
3. 验证Vercel重写规则
当前vercel.json的重写规则正确,会将所有请求转发到/api(即api/index.js处理),确保api目录下的入口文件为index.js,符合Vercel Serverless Functions的目录要求。
4. 重新部署测试
修正代码后,重新推送代码至Vercel部署,测试所有子路由是否能正常访问。
内容的提问来源于stack exchange,提问作者MERN
相关产品推荐
相关产品推荐

