为何API Route在Vercel部署后无法正常工作?
检查API Route文件结构是否符合Vercel要求
Vercel对主流框架(如Next.js)的API Route有固定目录规则:Pages Router项目需放在pages/api下,App Router项目需放在app/api下,文件路径直接对应访问路径(比如pages/api/user.js对应/api/user)。路径不对的话,部署后Vercel无法识别该API。验证环境变量配置
本地用的环境变量(如数据库连接串、第三方API密钥)必须在Vercel项目的「Settings → Environment Variables」中完整配置,并且勾选Production环境生效。变量名要和本地完全一致,大小写敏感,漏配或错配会导致API运行失败。排查代码中的本地依赖问题
代码里如果写了本地绝对路径(比如/Users/xxx/local-file.txt)、依赖本地私有的文件/服务,部署到Vercel后会找不到资源。改成相对路径,或者确保依赖的服务能被公网访问。查看Vercel的部署与函数日志
错误日志是定位问题的关键:- 进入项目的Deployments页面,点击对应部署记录查看Build Logs,检查是否有编译或依赖安装错误;
- 在Functions页面找到对应的API函数,查看Runtime Logs,里面会记录请求时的报错(比如未捕获异常、权限不足、数据库连接失败)。
配置CORS(跨域场景)
本地开发可能靠代理解决跨域,但Vercel上需要在API Route里显式配置CORS。以Next.js为例,在API文件中添加:export default function handler(req, res) { // 生产环境建议替换为具体域名,不要用* res.setHeader('Access-Control-Allow-Origin', '*'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type'); // 处理OPTIONS预检请求 if (req.method === 'OPTIONS') { res.status(200).end(); return; } // 你的业务逻辑 res.status(200).json({ data: 'success' }); }确认服务访问权限与部署区域
如果API依赖内网服务(比如本地数据库),Vercel的Serverless函数无法直接访问内网,需将服务改成公网可访问,或使用Vercel Private Network建立连接。另外,部署区域与服务区域距离过远可能导致超时,可尝试切换Vercel部署区域。核对请求方法与参数格式
确保前端请求的HTTP方法(GET/POST等)与API Route中处理的方法一致,参数传递格式正确(比如POST请求要设置Content-Type: application/json并发送JSON格式数据)。本地测试工具(如Postman)可能自动处理这些,但前端部署后可能遗漏配置。
内容的提问来源于stack exchange,提问作者Naivotiana Rojonantenaina

