[ PROMPT_NODE_24482 ]
Workers API 参考
[ SKILL_DOCUMENTATION ]
# Workers 运行时 API
## Fetch 处理程序
typescript
export default {
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise {
const url = new URL(request.url);
if (request.method === 'POST' && url.pathname === '/api') {
const body = await request.json();
return new Response(JSON.stringify({ id: 1 }), {
headers: { 'Content-Type': 'application/json' }
});
}
return fetch(request); // 向源站发起子请求
},
};
## 执行上下文 (Execution Context)
typescript
ctx.waitUntil(logAnalytics(request)); // 后台任务,不阻塞响应
ctx.passThroughOnException(); // 出错时回退到源站
**永远不要** `await` 后台操作 - 请使用 `ctx.waitUntil()`。
## 绑定 (Bindings)
typescript
// KV
await env.MY_KV.get('key');
await env.MY_KV.put('key', 'value', { expirationTtl: 3600 });
// R2
const obj = await env.MY_BUCKET.get('file.txt');
await env.MY_BUCKET.put('file.txt', 'content');
// D1
const result = await env.DB.prepare('SELECT * FROM users WHERE id = ?').bind(1).first();
// D1 会话 (2024+) - 读写一致性
const session = env.DB.withSession();
await session.prepare('INSERT INTO users (name) VALUES (?)').bind('Alice').run();
const user = await session.prepare('SELECT * FROM users WHERE name = ?').bind('Alice').first(); // 保证最新
// 队列
await env.MY_QUEUE.send({ timestamp: Date.now() });
// 密钥/变量
const key = env.API_KEY;
## 缓存 API
typescript
const cache = caches.default;
let response = await cache.match(request);
if (!response) {
response = await fetch(request);
response = new Response(response.body, response);
response.headers.set('Cache-Control', 'max-age=3600');
ctx.waitUntil(cache.put(request, response.clone())); // 缓存前克隆
}
## HTMLRewriter
typescript
return new HTMLRewriter()
.on('a[href]', {
element(el) {
const href = el.getAttribute('href');
if (href?.startsWith('http://')) {
el.setAttribute('href', href.replace('http://', 'https://'));
}
}
})
.transform(response);
**用例**:A/B 测试、分析注入、链接重写
## WebSockets
### 标准 WebSocket
typescript
const [client, server] = Object.values(new WebSocketPair());
server.accept();
server.addEventListener('message', event => {
server.send(`Echo: ${event.data}`);
});
return new Response(null, { status: 101, webSocket: client });
### WebSocket 休眠 (Recom