创建时间: 2026-04-29最后更新: 2026-04-29

1. 概述

前面把 Hono RPC、共享 contract、统一错误响应都接起来之后,API 里其实还留着一个很明显的手工校验点:validator('json', ...) 里自己调用 PingRequestSchema.safeParse(),再手动返回失败响应。

app.ts
1
validator('json', (value, c) => {
2
const parsed = PingRequestSchema.safeParse(value)
3
...
4
})

当前项目里这一段还能工作,但它已经暴露出两个问题:

  • schema 校验和 Hono 中间件是分开的
  • 每次写 JSON 校验时,都要手动处理 safeParse 的成功失败分支

如果后面 route 变多,这种写法会越来越重复。既然已经在用 zod,又在用 Hono,最直接的做法就是把这一层换成 @hono/zod-validator 提供的 zValidator

hono/validator 是 Hono 内置的通用校验中间件,@hono/zod-validator 是 Hono 官方的 Zod 集成,把 Zod schema 变成路由中间件。替换之后的代码可以变成

app.ts
1
import { zValidator } from '@hono/zod-validator'
2
3
app.post('/rpc/system/ping', zValidator('json', PingRequestSchema), (c) => {
4
const payload = c.req.valid('json')
5
...
6
})

替换之后的有点:

  • 少写一层 safeParse
  • c.req.valid('json') 的类型推导更自然
  • 代码更短,Zod 路由多了以后更省事儿
订阅后可阅读剩余内容
AI 电子伴侣企业级项目实战
已发布145计划发布120目标已完成121%