[ PROMPT_NODE_24486 ]
frameworks
[ SKILL_DOCUMENTATION ]
# Workers 框架
## Hono (推荐)
原生支持 Workers 的 Web 框架,具有出色的 TypeScript 支持和中间件生态系统。
bash
npm install hono
### 基础设置
typescript
import { Hono } from 'hono';
const app = new Hono();
app.get('/', (c) => c.text('Hello World!'));
app.post('/api/users', async (c) => {
const body = await c.req.json();
return c.json({ id: 1, ...body }, 201);
});
export default app;
### 类型化环境
typescript
import type { Env } from './.wrangler/types/runtime';
const app = new Hono();
app.get('/data', async (c) => {
const value = await c.env.MY_KV.get('key'); // 完全类型化
return c.text(value || 'Not found');
});
### 中间件
typescript
import { cors } from 'hono/cors';
import { logger } from 'hono/logger';
app.use('*', logger());
app.use('/api/*', cors({ origin: '*' }));
// 自定义中间件
app.use('/protected/*', async (c, next) => {
const auth = c.req.header('Authorization');
if (!auth?.startsWith('Bearer ')) return c.text('Unauthorized', 401);
await next();
});
### 请求验证 (Zod)
typescript
import { zValidator } from '@hono/zod-validator';
import { z } from 'zod';
const schema = z.object({
name: z.string().min(1),
email: z.string().email(),
});
app.post('/users', zValidator('json', schema), async (c) => {
const validated = c.req.valid('json'); // 类型安全,已验证的数据
return c.json({ id: 1, ...validated });
});
**错误处理**: 验证失败时自动返回 400 响应
### 路由分组
typescript
const api = new Hono().basePath('/api');
api.get('/users', (c) => c.json([]));
api.post('/users', (c) => c.json({ id: 1 }));
app.route('/', api); // 挂载在 /api/* 下
### 错误处理
typescript
app.onError((err, c) => {
console.error(err);
return c.json({ error: err.message }, 500);
});
app.notFound((c) => c.json({ error: 'Not Found' }, 404));
### 访问 ExecutionContext
typescript
export default {
fetch(request: Request, env: Env, ctx: ExecutionContext) {
return app.fetch(request, env, ctx);
},
};
// 在路由处理器中:
app.get('/log', (c) => {
c.executionCtx.waitUntil(logRequest(c.req));
return c.text('OK');
});
### OpenAPI/Swagger (Hono OpenAPI)
typescript
import { OpenAPIHono, createRoute, z } from '@hono/zod-openapi';
const app = new OpenAPIHono();
const route = createRoute({
method: 'get',
path: '/users/{id}',
request: { params: z.obj