HonoJS 作为一款轻量高效的 Web 框架,在近期版本(v3.x 系列,截至 2024 年)中推出了一些实用的新 API 和特性,以下是值得试用的几个亮点:
1. c.json()
增强:自动序列化与类型提示
在较新的版本中,c.json()
方法对 TypeScript 类型支持更友好,能自动推断响应数据类型,同时支持自定义序列化选项(如处理 BigInt、日期等):
typescript
import { Hono } from 'hono'
const app = new Hono()
app.get('/user', (c) => {
const user = { id: 1, name: 'Hono', createdAt: new Date() }
// 自动序列化 Date 等类型,且支持类型提示
return c.json(user, 200, {
replacer: (key, value) =>
value instanceof Date ? value.toISOString() : value
})
})
2. 路由组(Router Group)的 route()
链式调用
新增了更灵活的路由组嵌套方式,可通过 route()
链式注册子路由,简化复杂路由结构:
typescript
import { Hono } from 'hono'
import { userRouter } from './user'
import { postRouter } from './post'
const app = new Hono()
// 链式注册子路由,路径自动拼接
app.route('/api/v1')
.route('/users', userRouter) // 映射到 /api/v1/users
.route('/posts', postRouter) // 映射到 /api/v1/posts
3. c.req.valid()
用于请求验证
结合 zod
等验证库,新增 c.req.valid()
方法快速获取验证后的请求数据,简化参数校验流程:
typescript
import { Hono } from 'hono'
import { z } from 'zod'
import { zValidator } from '@hono/zod-validator'
const app = new Hono()
const schema = z.object({ name: z.string() })
app.post('/submit', zValidator('form', schema), (c) => {
// 直接获取验证后的类型安全数据
const data = c.req.valid('form')
return c.json({ message: `Hello, ${data.name}` })
})
4. 中间件组合器 composeMiddleware()
用于组合多个中间件,避免嵌套回调,提升代码可读性:
typescript
import { Hono, composeMiddleware } from 'hono'
import { logger } from 'hono/logger'
import { cors } from 'hono/cors'
const app = new Hono()
// 组合中间件并全局应用
const globalMiddleware = composeMiddleware(
logger(),
cors({ origin: '*' })
)
app.use(globalMiddleware)
app.get('/', (c) => c.text('Hello'))
5. onError
全局错误处理增强
支持按状态码或错误类型细分处理逻辑,更灵活地捕获和响应错误:
typescript
import { Hono } from 'hono'
const app = new Hono()
app.onError((err, c) => {
// 处理特定错误类型
if (err instanceof TypeError) {
return c.text('Type Error: ' + err.message, 400)
}
// 处理特定状态码
if (c.error?.status === 404) {
return c.text('Custom 404', 404)
}
return c.text('Server Error', 500)
})
6. 对 Bun 运行时的原生支持
新增 bun
适配器,优化在 Bun 环境下的性能,支持热重载等特性:
typescript
// server.ts
import { Hono } from 'hono'
import { serve } from '@hono/bun'
const app = new Hono()
app.get('/', (c) => c.text('Hello Bun!'))
serve(app) // 原生 Bun 服务启动
试用建议
- 最新 API 可参考 Hono 官方文档 的 "What's New" 章节。
- 部分 API 可能标记为 "实验性",建议在非生产环境试用,关注版本更新日志。
- 结合
hono-dev-server
可快速验证新特性,支持热重载和多运行时测试。
如果需要针对特定场景的 API 示例,可以进一步说明你的使用场景哦!