Bỏ qua tới nội dung

Hướng dẫn theo framework

Theo dõi lỗi cho Cloudflare Workers

@belvador/cloudflare bọc một Worker để lỗi trong các handler được báo, còn response giữ nguyên như code của bạn trả về. Mỗi lần gọi có scope riêng, nên user, tag và ngữ cảnh không bao giờ lẫn giữa các request.

Trả lời nhanh#

  • Bọc Worker được export bằng withBelvador từ @belvador/cloudflare.

  • Lỗi trong handler fetch, scheduled, queue, email và tail được báo; response không đổi.

  • Việc gửi diễn ra trong ctx.waitUntil, sau khi response đã trả.

  • Cần cờ nodejs_compat; class Durable Object chưa được bọc ở bản 0.x.

Cài đặt#

Terminal
npm install @belvador/cloudflare@0.6.1

Bọc Worker#

src/index.ts
import { withBelvador } from "@belvador/cloudflare";type Env = { BELVADOR_DSN?: string; BELVADOR_RELEASE?: string };// Requires the nodejs_compat compatibility flag.// The DSN comes from env.BELVADOR_DSN when you leave it out here.export default withBelvador(  (env: Env) => ({    dsn: env.BELVADOR_DSN ?? "https://<public-key>@ingest.belvador.dev/<project-id>",    release: env.BELVADOR_RELEASE,  }),  {    async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {      return new Response("ok");    },  },);

Bật cờ tương thích nodejs_compat trong wrangler.jsonc; chính cờ này cho mỗi lần gọi một scope riêng (hướng dẫn Cloudflare).

Scheduled handler#

Handler scheduled của Worker là một cron job như mọi cron job khác. Báo nó bằng check-in để lần chạy không hề diễn ra sẽ mở sự cố:

src/index.ts
import { withBelvador, withMonitor } from "@belvador/cloudflare";export default withBelvador((env: Env) => ({ release: env.BELVADOR_RELEASE }), {  async scheduled(controller, env, ctx) {    await withMonitor("nightly-invoices", async (run) => {      // Your job. Nothing to do? run.skip("nothing_due")    }, { schedule: { type: "crontab", value: "0 2 * * *" }, timezone: "UTC" });  },});

Lịch, kết quả và cảnh báo có ở theo dõi cron.

Trace và log#

Workers xuất được trace và log OpenTelemetry sang Belvador; hướng dẫn có cả cách xuất có sẵn của Cloudflare lẫn cách dùng SDK (OpenTelemetry cho Workers).

Chưa kiểm: cách cài này theo tài liệu của nhà cung cấp; Belvador chưa chạy trọn đường gửi.

Giới hạn#

  • Cú pháp module (export default { fetch … }) deploy bằng Wrangler. Cú pháp service worker không được hỗ trợ.

  • withBelvador bọc các handler fetch, scheduled, queue, email và tail của object được export. Class Durable Object chưa được bọc ở bản 0.x; hãy gọi captureException trong đó.

  • App TanStack Start hoặc Lovable thì dùng gói TanStack Start, vốn đã gồm gói này.

Câu hỏi thường gặp#

Bọc Worker có đổi response hay làm chậm response không?#

Response được trả đúng như code của bạn tạo ra. Việc gửi xong sau khi đã trả response, trong ctx.waitUntil, nên không làm người dùng phải chờ.

Thử trên project Hetzner của bạn

Miễn phí trong giai đoạn beta. Hetzner tính tiền máy; Belvador không bao giờ tính tiền theo event.