用途
Hono 是一个基于 Web 标准(Request/Response/fetch)构建的小型、简单且极快的 Web 框架。它可用于构建 API,尤其是面向边缘/无服务器环境(如 Cloudflare Workers、Vercel Edge)的应用,也适合需要多运行时可移植性的项目——同一套代码可运行在 Bun、Deno、Node.js 等环境。同时适合希望使用 TypeScript 优先开发并拥有良好类型推断、构建轻量高性能 API、以及需要内置常见中间件(如 CORS、认证、压缩)的场景。
与其他框架对比:Hono 多运行时、基于 Web 标准、极快、面向边缘优化;Express 仅限 Node.js、生态更大、速度较慢;Fastify 仅限 Node.js、基于 schema、性能良好;Elysia 仅限 Bun、性能优秀、API 风格不同。
主要能力
- 基于 Web 标准构建,运行于 Cloudflare Workers、Deno、Bun、Node.js、Vercel、AWS Lambda 等多运行时。
- 使用 RegExpRouter 的超快路由。
- 一流的 TypeScript 支持。
- 轻量(压缩后约 14KB)。
- 丰富的中间件生态。
- 支持路径参数、可选参数、正则校验、通配符、路由分组与多文件路由组织。
- 上下文对象(c)可访问请求数据(路径参数、查询参数、请求头、JSON 体、表单数据、环境绑定、自定义变量)并提供多种响应方法(text、json、html、redirect、notFound、header、streamText、原始 Response)。
- 内置错误处理(HTTPException)、全局错误处理器与 notFound 处理器,支持自定义错误类。
- 针对不同运行时的导出方式(Cloudflare Workers、Node.js、Bun、Deno)。
- 使用 createFactory 创建类型安全的处理器。
使用方式
安装:
# 创建新项目(推荐)
npm create hono@latest my-app
在已有项目中安装:
npm install hono
运行时特定适配器:
npm install @hono/node-server # Node.js
创建应用示例:
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => c.text('Hello Hono!'))
export default app
使用 TypeScript 泛型定义绑定与变量:
type Bindings = {
DATABASE_URL: string
API_KEY: string
}
type Variables = {
user: { id: string; name: string }
}
const app = new Hono<{ Bindings: Bindings; Variables: Variables }>()
上下文对象常用方法(示例):
app.get('/users/:id', async (c) => {
const id = c.req.param('id')
const query = c.req.query('sort')
const queries = c.req.queries('tags')
const header = c.req.header('Authorization')
const body = await c.req.json()
const form = await c.req.formData()
const db = c.env.DATABASE_URL
const user = c.get('user')
return c.json({ id, name: 'User' })
})
路由分组示例:
const api = new Hono()
api.get('/users', getUsers)
api.get('/posts', getPosts)
const app = new Hono()
app.route('/api/v1', api)
错误处理示例:
import { HTTPException } from 'hono/http-exception'
app.onError((err, c) => {
if (err instanceof HTTPException) {
return err.getResponse()
}
return c.json({ error: 'Internal Server Error' }, 500)
})
app.notFound((c) => {
return c.json({ error: 'Route not found' }, 404)
})
运行时导出示例(Node.js):
import { serve } from '@hono/node-server'
import { Hono } from 'hono'
const app = new Hono()
app.get('/', (c) => c.text('Hello Node!'))
serve({ fetch: app.fetch, port: 3000 })
Bun 导出:
export default {
port: 3000,
fetch: app.fetch
}
Deno 导出:
import { Hono } from 'npm:hono'
Deno.serve(app.fetch)
适用场景
- 为边缘/无服务器环境(Cloudflare Workers、Vercel Edge)构建 API。
- 需要多运行时可移植性(同一代码在 Bun、Deno、Node.js 上运行)。
- 追求 TypeScript 优先开发与优秀类型推断。
- 构建轻量、高性能 API。
- 需要内置中间件处理常见模式(CORS、认证、压缩)。
限制
资料中未明确列出该框架的功能或使用限制。文档提示了几条最佳实践:应将处理器内联编写而非使用控制器类(否则会丢失类型推断),使用模块化路由按域拆分,并尽量为环境绑定等定义类型。
相关技能:hono-middleware(中间件模式与组合)、hono-validation(使用 Zod 的请求验证)、hono-rpc(类型安全 RPC 客户端)、hono-testing(测试模式)、hono-jsx(服务端 JSX 渲染)、hono-cloudflare(Cloudflare Workers 部署)。
版本:Hono 4.x;最后更新:2025 年 1 月;许可证:MIT。