mcpField
H
hono

hono

github.com/oakoss开发21106 次安装12 周前更新
代码仓库

关于 hono

Hono 是面向开发者的轻量 Web 框架,可在多种 JavaScript 运行时构建 API 和请求处理应用。它基于 Web 标准,使应用代码具有可移植性,各运行时只需使用相应入口和适配器。

主要功能

  1. 01路由与路由分组
  2. 02请求工作流中间件
  3. 03JSON、文本和 HTML 响应
  4. 04请求解析与验证
  5. 05类型安全的 RPC 客户端
  6. 06测试、WebSocket 与 JSX 流式渲染

适用场景

  1. 01为边缘运行时构建 API
  2. 02在多种 JavaScript 运行时创建服务
  3. 03为请求工作流添加中间件
  4. 04无需 HTTP 服务器测试路由

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/oakoss/agent-skills --skill hono

安装后在 Claude Code 中输入/hono确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
adapters.md
context-and-helpers.md
middleware.md
routing.md
rpc-client.md
testing-and-websocket.md
validation.md

详细介绍

Hono

概述

Hono 是一个基于 Web 标准构建的小型超高速 Web 框架,可在任何 JavaScript 运行时上运行,包括 Cloudflare Workers、Bun、Deno、Node.js、Vercel 和 AWS Lambda。应用代码可在不同运行时之间移植;每个平台只需更换入口点和适配器。

适用场景: Edge 优先的 API、Cloudflare Workers 服务、多运行时应用、轻量级 REST/RPC 服务、中间件密集型请求管道、类型安全的客户端-服务端通信。

不适用场景: 全栈 SSR 框架(请使用 Next.js/Remix)、重度依赖 ORM 且需要 Express 生态成熟度的单体应用、需要使用没有 Web 标准等效方案的 Node.js 专属底层 API 的应用。

快速参考

模式API要点
基本路由app.get('/path', handler)支持 get、post、put、delete、patch、all
路径参数app.get('/user/:id', handler)通过 c.req.param('id') 访问
正则约束app.get('/post/:id{[0-9]+}', handler)在路径参数中内联正则表达式
通配符app.get('/files/*', handler)匹配任意子路径
路由分组app.route('/api', subApp)挂载子应用
中间件app.use(middleware())按注册顺序执行
路径中间件app.use('/auth/*', jwt(...))将中间件限定到指定路径
JSON 响应c.json({ key: 'value' })自动设置 Content-Type
文本响应c.text('hello')返回纯文本
HTML 响应c.html('<h1>Hi</h1>')返回 HTML 内容
状态码 + 标头c.status(201)、c.header('X-Key', 'val')在响应前链式调用
重定向c.redirect('/new-path', 301)默认状态码为 302
请求正文c.req.json()、c.req.parseBody()解析 JSON 或表单数据
查询参数c.req.query('page')获取单个查询参数
上下文变量c.set('user', data) / c.get('user')以类型安全的方式传递中间件数据
Zod 验证zValidator('json', schema)@hono/zod-validator 包
RPC 客户端hc<AppType>(url)端到端类型安全的 API 调用
错误处理器app.onError((err, c) => ...)全局错误处理
未找到处理器app.notFound((c) => ...)自定义 404 处理器
环境c.env.BINDING_KEY访问运行时绑定/环境变量
适配器辅助函数来自 hono/adapter 的 env(c)在不同运行时中统一访问环境变量
WebSocket来自运行时适配器的 upgradeWebSocket()支持 RPC 的 WebSocket 辅助函数
测试客户端来自 hono/testing 的 testClient(app)无需 HTTP 服务端即可进行类型安全的测试
JSX 流式传输jsxRenderer({ stream: true })支持 Suspense 的 SSR 流式传输

常见错误

错误正确做法
在处理程序之后注册中间件在需要应用中间件的处理程序之前注册中间件
使用 app.route() 时,RPC 类型未进行链式调用链式调用路由方法(app.route('/a', a).route('/b', b)),并导出 typeof routes
在边缘运行时中忘记 export default appCloudflare Workers、Bun 和 Deno 需要默认导出
在 Cloudflare Workers 或 Deno Deploy 上使用 compress()这些平台会自动压缩;请跳过该中间件
在 Deno 中混用 Hono 和中间件版本将所有 hono 导入固定到同一版本,以避免类型不匹配
在中间件中将 next() 包裹在 try/catch 中Hono 会捕获抛出的错误并将其路由到 app.onError();next() 不会抛出错误
使用 app.get() 定义路由,却为 RPC 导出 typeof app导出链式路由变量的类型,而非 app 实例的类型
使用 new Hono() 时未指定泛型传入 Hono<{ Variables: MyVars }>,以启用类型化的 c.get()/c.set()
返回 c.json() 时未为已创建的资源指定状态码将状态码作为第二个参数传入:c.json(data, 201)
未使用 createMiddleware() 创建可复用的中间件从 hono/factory 导入,以便提取中间件时保留类型推断

委派

如果有 zod 或 typescript-patterns 技能,请将架构和类型级任务委派给它。 否则,建议使用:npx skills add oakoss/agent-skills --skill typescript-patterns

如果有 Cloudflare Workers 技能,请将平台特定配置委派给它。

参考

评论

支持 Markdown