What are Cloudflare Workers?
Imagine building a website for a global audience. If your server is located in Vietnam, users in Europe or the US might experience significant delays as requests travel across the globe. With Cloudflare Workers, your code is replicated and executed at the data center closest to the user. It’s like having a "virtual assistant" in every country, ready to serve users without waiting for a signal from the home server.
Cloudflare Workers run on V8, the powerful JavaScript engine used in Google Chrome. This allows developers to write modern JavaScript or TypeScript without worrying about compatibility, while also supporting WebAssembly for high-performance tasks.
Key Advantages:
- Instant Cold Starts: Under 1ms startup time (compared to 300-500ms for traditional serverless).
- Global Deployment: Automatically distributed across Cloudflare's entire edge network.
- High Performance: Logic runs near the user to minimize latency.
- Zero Server Management: Focus entirely on your code.
Free Tier Overview
Cloudflare offers a generous Free Tier, making it a perfect playground for students and startup developers:
- 100,000 requests per day (~3 million per month).
- 10ms CPU time per request.
- Unlimited Worker scripts.
- Unlimited Custom Domains.
- Cloudflare KV: 1GB storage, 100k reads/day, 1k writes/day.
Step-by-Step Setup Guide
1. Initialize your environment
First, create a free Cloudflare account and install the Wrangler CLI tool.
# Install Wrangler globally
npm install -g wrangler
# Login to your Cloudflare account
wrangler login
# Initialize a new project
wrangler init my-first-worker
2. Implementation
A basic Worker uses a standard fetch handler. Create a file named index.js:
export default {
async fetch(request, env, ctx) {
try {
return new Response('Hello World from the Edge!', {
headers: { 'Content-Type': 'text/plain' }
});
} catch (error) {
return new Response(`Error: ${error.message}`, { status: 500 });
}
}
};
3. Deploy to the Edge
Executing the deployment command sends your code to all 300+ data centers instantly.
wrangler deploy
Real-World Use Cases
1. API Gateway/Proxy
Protect or route API calls while adding custom headers or authentication.
export default {
async fetch(request, env) {
try {
const url = new URL(request.url);
// Clone request and add an API Key
const modifiedRequest = new Request(request);
modifiedRequest.headers.set('X-Custom-Auth', env.API_SECRET);
// Forward to the origin server
return await fetch('https://api.your-backend.com' + url.pathname, modifiedRequest);
} catch (err) {
return new Response('Gateway Error', { status: 502 });
}
}
};
2. URL Shortener using KV
Create a lightning-fast URL redirector using Cloudflare’s Key-Value store.
export default {
async fetch(request, env) {
const url = new URL(request.url);
const slug = url.pathname.substring(1);
if (!slug) return new Response('Welcome to the Edge Redirection service.');
try {
const destination = await env.URLS_KV.get(slug);
if (destination) {
return Response.redirect(destination, 301);
}
return new Response('URL Path Not Found', { status: 404 });
} catch (e) {
return new Response('Storage Error', { status: 500 });
}
}
};
Common Errors & Solutions
| Error | Cause | Solution |
|---|---|---|
CPU Limit Exceeded |
Your code exceeded the 10ms limit on the Free Tier. | Optimize nested loops or move heavy logic to the client. |
ReferenceError: [API] is not defined |
Attempting to use Node.js APIs (e.g., fs, path) not present in the V8 runtime. |
Use Web-standard APIs or Fetch. |
Binding Error |
Requesting a KV namespace or Secret that isn't defined in wrangler.toml. |
Ensure all kv_namespaces and vars are correctly mapped in your config. |
Best Practices
- Security First: Never hardcode secrets. Use
wrangler secret put <KEY>to encrypt sensitive data. - Keep it Lean: The 10ms CPU limit is generous but strict. Avoid heavy computation in the fetch handler.
- Leverage Edge Caching: Use the Cache API to store responses at the edge and save CPU cycles.