如何配置vercel.json使/api/items等API路由在Vercel部署的后端应用中正常工作?
如何配置vercel.json使/api/items等API路由在Vercel部署的后端应用中正常工作?
别着急,我帮你梳理了问题核心——你的vercel.json里缺少路由重写规则,导致Vercel不知道该把/api/开头的请求转发给你的Express应用处理,所以只有根路径/能正常响应。
下面是具体的修复方案:
1. 更新vercel.json配置
在现有配置中添加routes字段,让所有/api/*和根路径的请求都指向你的index.js:
{ "version": 2, "builds": [ { "src": "./index.js", "use": "@vercel/node" } ], "routes": [ { "src": "/api/(.*)", "dest": "/index.js" }, { "src": "/(.*)", "dest": "/index.js" } ], "headers": [ { "source": "/api/(.*)", "headers": [ { "key": "Access-Control-Allow-Origin", "value": "https://to-my-frontend" }, { "key": "Access-Control-Allow-Methods", "value": "GET, POST, PUT, DELETE, OPTIONS" }, { "key": "Access-Control-Allow-Headers", "value": "Content-Type, Authorization" } ] } ] }
这个routes配置的作用是告诉Vercel:所有匹配/api/xxx的请求,以及其他所有请求,都交给index.js里的Express应用处理,这样你的路由规则才能被正确解析。
2. 确认index.js的配置合理性
你的index.js写法完全没问题:
- 已经通过
app.use('/api', userRoutes)和app.use('/api', itemRoutes)正确挂载了API路由 - 用
module.exports = app导出应用的方式符合@vercel/node的要求,Vercel会自动处理端口监听,不需要手动写app.listen() - CORS中间件的配置也没问题,和vercel.json里的header规则不冲突(其实保留其中一种配置就够用,你可以根据需求调整)
3. 重新部署应用
把修改后的vercel.json提交到仓库,触发Vercel重新部署,之后应该就能正常访问/api/items这类路由了。
如果还有问题,可以查看Vercel部署日志里的报错信息(比如依赖安装失败、路由解析错误等),这些能帮你进一步定位问题。
备注:内容来源于stack exchange,提问作者Murchoid
相关产品推荐
相关产品推荐

