Rakazo Pages
一个 Worker、一个域名、路径即页面。聊天里生成的每个页面都是一个 slug,不再占用新的 Pages 项目。
域名 ‑
运行时 Cloudflare Workers
存储 Workers KV
页面数 ‑
为什么不是一个页面对应一个 project
每个 Cloudflare Pages 项目 = 一次独立部署 + 一个子域 + 一份构建记录。发几十个页面就会把项目列表塞满,而且每页都要重新走一遍部署流程。
这里改成:Worker 只部署一次,页面正文存进 KV,用 /<slug> 路由。新增页面 = 一次 KV 写入,秒级生效,Worker 不动。
请求路径
1
GET /索引页:一次 KV
list() 读出所有页面的标题/描述/标签,自带搜索框。2
GET /<slug>读
page:<slug> → 返回 HTML,自动注入左下角「← Rakazo Pages」返回徽标。3
GET /_list.json机器可读的页面清单,方便其他 bot 或脚本发现页面。
4
GET /<slug>?json=1返回该页原始记录(标题、标签、HTML 源)。
发布一个页面
PUT /accounts/{account}/storage/kv/namespaces/{ns}/bulk
[{
"key": "page:my-report",
"metadata": { "title": "周报", "description": "…", "updatedAt": "2026-11-01T06:00:00Z", "tags": ["report"] },
"value": "{\"title\":\"周报\",\"html\":\"<!doctype html>…\"}"
}]
Worker 本身没有任何写接口 —— 它只读 KV,所以页面内容无法被外部篡改;发布动作由持有 Cloudflare 凭据的一侧完成。
实时检查
下面这段是页面里真实运行的 JS,直接请求本站 /_list.json:
加载中…
性能与缓存
| 环节 | 行为 |
|---|---|
| 边缘缓存 | 页面 300s,索引 30s,命中 Cache API 直接返回 |
| KV 读 | 冷路径一次读;索引只读 metadata,不读正文 |
| 失效 | 改写 KV 后最多 300s 生效(ETag 随 updatedAt 变化) |