DEV Community

Alex Spinov
Alex Spinov

Posted on

Wrangler Has a Free API — Here's How to Deploy Cloudflare Workers from CLI

Wrangler is the CLI for Cloudflare Workers — the serverless platform that runs at the edge in 300+ cities. The free tier includes 100K requests/day, making it perfect for APIs and microservices.

Installation

npm install -g wrangler
wrangler login
Enter fullscreen mode Exit fullscreen mode

Create a Worker

npm create cloudflare@latest my-worker
cd my-worker
Enter fullscreen mode Exit fullscreen mode

Worker Code

// src/index.ts
export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const url = new URL(request.url);

    if (url.pathname === "/api/hello") {
      return Response.json({ message: "Hello from the edge!" });
    }

    if (url.pathname === "/api/scrape" && request.method === "POST") {
      const { targetUrl } = await request.json();
      const response = await fetch(targetUrl);
      const html = await response.text();
      return Response.json({ length: html.length, status: response.status });
    }

    return new Response("Not Found", { status: 404 });
  }
};
Enter fullscreen mode Exit fullscreen mode

wrangler.toml Configuration

name = "my-worker"
main = "src/index.ts"
compatibility_date = "2024-01-01"

[vars]
API_KEY = "public-value"

[[kv_namespaces]]
binding = "CACHE"
id = "your-kv-namespace-id"

[[d1_databases]]
binding = "DB"
database_name = "my-db"
database_id = "your-d1-id"
Enter fullscreen mode Exit fullscreen mode

KV Storage

// Store and retrieve key-value data
await env.CACHE.put("user:123", JSON.stringify({ name: "Alex" }), { expirationTtl: 3600 });
const user = await env.CACHE.get("user:123", "json");
Enter fullscreen mode Exit fullscreen mode

D1 Database (SQLite at the Edge)

const { results } = await env.DB.prepare(
  "SELECT * FROM users WHERE active = ? LIMIT ?"
).bind(1, 10).all();
Enter fullscreen mode Exit fullscreen mode

Deploy

# Dev server with hot reload
wrangler dev

# Deploy to production
wrangler deploy

# Deploy to staging
wrangler deploy --env staging

# Tail logs
wrangler tail
Enter fullscreen mode Exit fullscreen mode

Cron Triggers

# wrangler.toml
[triggers]
crons = ["0 */6 * * *"]  # Every 6 hours
Enter fullscreen mode Exit fullscreen mode
export default {
  async scheduled(event: ScheduledEvent, env: Env) {
    // Runs on schedule
    await updateCache(env);
  }
};
Enter fullscreen mode Exit fullscreen mode

Need to extract or automate web content at scale? Check out my web scraping tools on Apify — no coding required. Or email me at spinov001@gmail.com for custom solutions.

Top comments (0)