Express路由参数在Vercel部署后失效,请求技术支持
解决Express短链项目在Vercel部署后的404问题
Vercel默认会优先将请求匹配静态资源,只有当静态资源不存在时才会转发给Node.js服务器。你的动态路由/:uid在Vercel上被当成静态文件路径查找,找不到就返回404,这就是问题所在。
解决方案
- 添加Vercel路由重写配置
在项目根目录创建vercel.json文件,配置所有请求都转发到你的Express服务器入口文件:
{ "rewrites": [ { "source": "/(.*)", "destination": "/server.js" } ] }
注意:将/server.js替换成你实际的服务器启动文件名(比如index.js)。
- 确认package.json的启动脚本
确保package.json中包含正确的start命令,Vercel会用这个命令启动你的服务器:
{ "scripts": { "start": "node server.js" } }
- 完善getURL函数的错误处理
虽然不是Vercel特有的问题,但建议在getURL函数中处理uid不存在的情况,避免请求挂起:
function getURL(uid, res) { // 示例数据库查询逻辑 const targetUrl = yourDatabase.query(uid); if (targetUrl) { res.redirect(targetUrl); } else { res.status(404).send("该短链不存在"); } }
完成以上配置后,重新部署到Vercel,动态路由即可正常工作。
内容的提问来源于stack exchange,提问作者Ashwith Bhatt
相关产品推荐
相关产品推荐

