折腾了一下午 Vercel Edge Function,我认输了
一、起因
今天心血来潮,想给自己写一个小 API —— 随机返回一句名人名言。
需求很简单:
用 Vercel 的 Edge Function 部署
访问 /api/saying 返回一句 JSON
顺便把根目录用 403 页面挡住,防止爬虫瞎逛
听起来不难吧?我也觉得不难。
于是,我打开了 WebStorm,开始了今天这场“自取其辱”之旅。
二、过程
第一步:创建项目
bash
npx create-next-app@latest edgeapi
一路选默认,TypeScript + App Router,顺顺利利。
然后删掉模板文件,只留下:
app/api/saying/route.ts —— 我的名言 API
lib/sayings.ts —— 250+ 条名言数据
public/index.html —— 403 页面
本地跑起来:
bash
npm run dev
访问 http://localhost:3000/api/saying,返回:
json
{
“text”: “我们也许再也不会见面了吧,因此我绝对不会忘了你的声音…”
}
完美。 我当时觉得,这波稳了。
第二步:部署到 Vercel
bash
vercel –prod
构建日志一路飘绿:
text
Route (app)
└ ƒ /api/saying
Build Completed in 21s
Deployment completed
看到这行的时候,我差点笑出声 —— 这玩意儿也太简单了吧?
第三步:访问测试
打开浏览器,输入:
text
https://edgeapi.vercel.app/api/saying
然后屏幕上是:
text
404: NOT_FOUND
Code: NOT_FOUND
ID: arn1::jcwxk-1784362428761-eb21f87aea39
???
我刷新。再刷新。换浏览器。换手机。清缓存。
还是 404。
三、排查之路(原地打转)
第一轮:路径问题?
我反复确认:
app/api/saying/route.ts 存在
文件内容正确
导出 GET 函数
声明了 export const runtime = ‘edge’
路径没问题。
第二轮:部署问题?
重新部署:
bash
vercel –prod –force
构建成功,部署完成,访问,还是 404。
第三轮:文件名大小写?
检查文件名:route.ts,全小写,没问题。
第四轮:根目录 403 页面冲突?
删除 public/index.html,重新部署,访问 /api/saying,还是 404。
好,排除。
第五轮:Vercel 日志?
去 Vercel 仪表盘的 Functions 和 Logs 里翻了一遍,没有报错,没有异常,就像这个路由压根不存在一样。
四、我放弃了
折腾了整整一个下午。
从信心满满,到一脸茫然,到满头问号,到最后坐在电脑前发呆。
所有能想到的地方都检查了:
路径没错
代码没问题
部署成功了
日志没有报错
但它就是 404。
五、结论
我水平太菜了。
排查不出来,就是排查不出来。
这不是 Vercel 的问题,也不是 Next.js 的问题,是我的问题 —— 我还没到那个能一眼看穿问题的水平。
六、下次再战
今天先认输。
但我不会一直认输。
下次我会:
用更小的 Demo 项目先验证 Edge Function 能不能跑通
检查 Vercel 的项目配置是不是哪里不对
问问 ChatGPT 有没有什么隐藏的坑
等我把这个问题搞明白了,我会写一篇 《我是如何解决 Vercel Edge Function 部署 404 问题的》,把今天的坑全部填上。
贴一下日志
16:00:41.538
⚠ Using edge runtime on a page currently disables static generation for that page
16:00:41.548
Generating static pages using 1 worker (0/2) …
16:00:41.663
✓ Generating static pages using 1 worker (2/2) in 115ms
16:00:41.669
Finalizing page optimization …
16:00:41.674
16:00:41.678
Route (app)
16:00:41.678
┌ ○ /_not-found
16:00:41.679
└ ƒ /api/saying
16:00:41.679
16:00:41.679
16:00:41.679
○ (Static) prerendered as static content
16:00:41.679
ƒ (Dynamic) server-rendered on demand
16:00:41.680
16:00:42.222
Build Completed in /vercel/output [21s]
16:00:42.324
Deploying outputs…
16:00:43.057
Deployment completed
16:00:43.170
Creating build cache…
16:00:57.572
Created build cache: 14s
16:00:57.573
Uploading build cache [109.55 MB]
16:00:59.690
Build cache uploaded: 2.118s
后记
就在我准备放弃的时候,突然想到:要不试试 Cloudflare Workers?
结果 20 分钟就搞定了。
对比
Vercel Edge Function:折腾一下午,还是 404
Cloudflare Workers:改一下代码,点部署,一次成功
链接:blog.e.002147.xyz/2026/07/18/7/