Next.js 14部署Vercel后Cron Jobs返回404错误的解决求助
解决Vercel Cron Jobs触发404的问题
核心原因
Vercel默认会用「最新部署」的临时预览域名调用Cron Jobs,而你的API路由仅在生产环境部署(主分支)中正常生效,导致临时域名访问时返回404。
解决方案
1. 绑定Cron Jobs到生产环境部署
进入Vercel控制台的项目「Settings」>「Cron Jobs」,编辑每个定时任务:
- 在「Deployment」下拉菜单中,选择你的生产环境部署(通常是main/master分支的部署,而非默认的「Latest Deployment」)
- 保存后重新触发任务,即可使用生产域名调用API路由
2. 验证API路由文件路径匹配
确保你的API路由文件路径与vercel.json中的path完全对应:
- 若使用Next.js 14 App Router,文件需放在
app/api/cron/[task-name]/route.ts(例如app/api/cron/alert-before-experience/route.ts) - 若使用Pages Router,文件需放在
pages/api/cron/[task-name].ts(例如pages/api/cron/alert-before-experience.ts)
3. 强制指定Cron调用域名(可选)
如果上述方法无效,可在vercel.json的cron配置中添加domain字段,明确指定生产域名:
{ "crons": [{ "path": "/api/cron/alert-before-experience", "schedule": "10,30,50 * * * *", "domain": "xxx-rho.vercel.app" }, { "path": "/api/cron/alert-no-disponibility", "schedule": "* 2 * * *", "domain": "xxx-rho.vercel.app" }, { "path": "/api/cron/transfer-from-platform-to-connected-accounts", "schedule": "0 * * * *", "domain": "xxx-rho.vercel.app" }] }
注意:domain必须是已绑定到项目的生产域名(自定义域名或Vercel分配的主域名),不能用临时预览域名。
4. 检查生产环境路由可用性
手动访问生产域名的API路径(例如https://xxx-rho.vercel.app/api/cron/alert-before-experience),确认返回正常响应,排除路由本身的错误或权限限制(比如IP白名单需包含Vercel Cron的调用IP)
内容的提问来源于stack exchange,提问作者Yannis Haismann
相关产品推荐
相关产品推荐

