平台与运维
Cloudflare 已知坑(开发须知)
- per-request 绑定:Drizzle/auth 每请求新建(用
createDb(env.DB)),绝不跨请求复用。 - 禁用
process.env:一律从src/lib/env.ts的env(来自cloudflare:workers)取;ESLint 已强制(no-restricted-properties)。 - CPU-ms 预算:图像等重计算监控/降级。
- Node 兼容:
compatibility_flags: ["nodejs_compat"]已开;需要的 polyfill 在此登记。 - (阶段2)Stripe webhook:取原始 body + Web Crypto 异步验签,非 Node crypto。
- (阶段1)Better-Auth 后台任务:关键 session 写入走同步路径 + 重试,避免响应后 D1 瞬时错误挂起。
Cron Triggers(定时任务)
CF 的定时任务通过 worker 的 scheduled handler 实现,而非 fetch。本模板已接好一个参考实现:
- 调度:
wrangler.jsonc的triggers.crons(默认每日 03:00 UTC)。命名环境 staging/production 不继承顶层配置,各自重复声明(与 bindings 同理)。 - 入口:
src/worker.ts的scheduled()(与fetch并列,一同被Sentry.withSentry包裹)。 - 逻辑:
src/features/maintenance/cleanup.ts的runCleanup()—— 删过期 session / verification token + 陈旧 better-auth 限流行。now注入以便测试(cleanup.workers.test.ts)。 - 扩展:把你自己的周期任务(发摘要邮件、按天清理 配额计数等)加进
scheduled()或runCleanup()即可。
本地手动触发(无需等到点):
pnpm dev # 另开一个终端
curl "http://localhost:3000/cdn-cgi/handler/scheduled" # miniflare 暴露的 scheduled 触发端点注意:Cron Triggers 在 CF 免费档可用(零成本);Queues 才需付费档。所以"定时轮询"类需求用 cron,无需 Queues。