创建时间: 2026-04-29最后更新: 2026-04-29作者: yangbo(346d11d67)
1. 概述
前面把 Hono RPC、共享 contract、统一错误响应都接起来之后,API 里其实还留着一个很明显的手工校验点:validator('json', ...) 里自己调用 PingRequestSchema.safeParse(),再手动返回失败响应。
app.ts
1validator('json', (value, c) => {2const 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
1import { zValidator } from '@hono/zod-validator'23app.post('/rpc/system/ping', zValidator('json', PingRequestSchema), (c) => {4const payload = c.req.valid('json')5...6})
替换之后的有点:
- 少写一层
safeParse - c.req.valid('json') 的类型推导更自然
- 代码更短,Zod 路由多了以后更省事儿
订阅后可阅读剩余内容
AI 电子伴侣企业级项目实战
已发布239节计划发布120节目标已完成199%