Cloudflare Workers 本质上是”边缘 JS/TS 函数”——写一段代码,部署到全球 300 多个节点,用户就近访问。适合做 API 代理、Webhook、AI 接口中转、鉴权网关,比自建 Nginx 或买 VPS 省事。
项目起步
一个命令拉起脚手架:
npm create cloudflare@latest my-worker
cd my-worker
npm run dev # 本地起 wrangler dev
npm run deploy # 部署到生产
第一次部署会让你登录:
npx wrangler login
最小骨架
新版模块化写法:
export default {
async fetch(request, env, ctx) {
return new Response("hello world");
},
};
访问 https://<name>.<account>.workers.dev 就能看到。
路由分发
原生没有路由框架,URL 手动分:
export default {
async fetch(request) {
const url = new URL(request.url);
if (url.pathname === "/api/user") {
return Response.json({ name: "alice", age: 18 });
}
if (url.pathname === "/health") {
return new Response("ok");
}
return new Response("Not Found", { status: 404 });
},
};
要更完善的路由体验就上 Hono:
import { Hono } from "hono";
const app = new Hono();
app.get("/api/user", (c) => c.json({ name: "alice" }));
export default app;
读取请求
// query string
const url = new URL(request.url);
const name = url.searchParams.get("name");
// JSON body
const data = await request.json();
// 表单
const form = await request.formData();
转发外部 API(最常见用法)
export default {
async fetch(request, env) {
const resp = await fetch("https://api.openai.com/v1/models", {
headers: { Authorization: `Bearer ${env.OPENAI_API_KEY}` },
});
return new Response(resp.body, resp);
},
};
常见用途:藏 API Key、破跨域、加限流、加缓存、AI 接口中转。Key 千万别写死在代码里,走 wrangler secret。
KV:类 Redis 键值
wrangler.toml:
[[kv_namespaces]]
binding = "MY_KV"
id = "xxxxxxxx"
代码:
await env.MY_KV.put("username", "alice");
const v = await env.MY_KV.get("username");
await env.MY_KV.delete("username");
KV 是最终一致(全球复制有几秒延迟),做缓存 / 配置 / session 都很合适。
D1:SQLite
[[d1_databases]]
binding = "DB"
database_name = "mydb"
database_id = "xxxxxxxx"
用法:
const rows = await env.DB
.prepare("SELECT * FROM users WHERE id = ?")
.bind(userId)
.all();
参数化查询是标配,别拼字符串——同样有 SQL 注入。
环境变量 vs Secret
普通变量写 wrangler.toml:
[vars]
APP_NAME = "my-app"
敏感 key 用 secret,不进代码库:
npx wrangler secret put OPENAI_API_KEY
两种都通过 env.XXX 访问。
免费额度和局限
- 免费 10 万次请求/天,付费 10 美元/月起
- 单请求 CPU 时间限制(免费 10ms,付费 50ms+,最高 5 分钟)
- 不能开 socket、不能持久保存本地文件
- Node.js 内置模块要靠
nodejs_compat兼容标志
一句话总结
Workers = 全球边缘 JavaScript。npm create cloudflare@latest 起步,fetch 转发是 90% 用例,配上 KV/D1 就能扛住一个中等 API 项目。
