Skip to main content
📞 1-888-784-3881🚀 Start Project
Examples

Worker Templates

Production-ready Cloudflare Worker templates.

⏱️ 10 min read

Lead Capture Worker

// src/index.ts

interface Env {

DB: D1Database;

PROPTECH_API_KEY: string;

SLACK_WEBHOOK: string;

}

export default {

async fetch(request: Request, env: Env): Promise<Response> {

// CORS headers

const headers = {

'Access-Control-Allow-Origin': '*',

'Access-Control-Allow-Methods': 'POST, OPTIONS',

'Access-Control-Allow-Headers': 'Content-Type',

};

if (request.method === 'OPTIONS') {

return new Response(null, { headers });

}

if (request.method !== 'POST') {

return new Response('Method not allowed', { status: 405, headers });

}

try {

const data = await request.json();

// Validate

if (!data.email || !data.name) {

return Response.json(

{ error: 'Name and email required' },

{ status: 400, headers }

);

}

// Store in D1

const result = await env.DB.prepare(

INSERT INTO leads (name, email, phone, created_at)

VALUES (?, ?, ?, datetime('now'))

RETURNING id

).bind(data.name, data.email, data.phone || null).first();

// Notify Slack

await fetch(env.SLACK_WEBHOOK, {

method: 'POST',

body: JSON.stringify({

text: 🏠 New lead: ${data.name} (${data.email}),

}),

});

return Response.json(

{ success: true, id: result?.id },

{ headers }

);

} catch (error) {

return Response.json(

{ error: 'Internal server error' },

{ status: 500, headers }

);

}

},

};

wrangler.toml

name = "lead-capture"

main = "src/index.ts"

compatibility_date = "2024-01-01"

[[d1_databases]]

binding = "DB"

database_name = "leads"

database_id = "your-database-id"

[vars]

SLACK_WEBHOOK = "https://hooks.slack.com/services/xxx"

# Set via wrangler secret

# wrangler secret put PROPTECH_API_KEY