SuperAPI AI 工具集

hono-core

编程与开发

查看项目

更新于 10-15 05:11

技能介绍

用途

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。