一、起因
今天心血来潮,想给自己写一个小 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/