从 Express 迁移到 Hono:我为什么选择这个轻量级框架

Sarah Wong | 2026-09-10T18:11:00 | JavaScript

最近把一个 Node.js 项目从 Express 迁移到了 Hono,性能提升明显而且开发体验更好。分享一下迁移过程和对比感受。

Express 是 Node.js 世界的老大哥了,但说实话它的设计已经有些过时了。最近把一个项目迁移到了 Hono,体验很好,来分享一下。 ## 为什么离开 Express - **没有原生 TypeScript 支持**:类型定义靠 `@types/express`,经常跟实际行为不一致 - **中间件模型过于自由**:`app.use()` 可以塞任何东西,没有类型约束 - **性能一般**:虽然够用,但跟新生代框架比确实差一截 - **错误处理不优雅**:异步错误需要手动 catch 或者用 `express-async-errors` ## Hono 的亮点 ### 类型安全的路由 ```typescript const app = new Hono(); app.get('/users/:id', async (c) => { const id = c.req.param('id'); // 自动推导为 string const user = await getUser(id); return c.json(user); // 返回类型自动推导 }); ``` ### 中间件类型安全 ```typescript // 中间件可以给上下文添加类型安全的变量 const authMiddleware = createMiddleware(async (c, next) => { const token = c.req.header('Authorization'); const userId = verifyToken(token); c.set('userId', userId); await next(); }); app.get('/profile', authMiddleware, async (c) => { const userId = c.get('userId'); // 类型安全,自动推导为 string }); ``` ### 多运行时支持 同一份代码可以跑在 Node.js、Bun、Deno、Cloudflare Workers 上,不用改任何东西。 ## 性能对比 用 wrk 压测一个简单的 JSON 接口(Node.js 22): | 框架 | req/s | 延迟 (avg) | |------|-------|-----------| | Express | 15,200 | 6.5ms | | Hono | 28,500 | 3.5ms | 接近 2 倍的性能差距。主要是 Hono 的路由匹配用了 Trie 树,比 Express 的线性匹配快得多。 ## 迁移成本 迁移一个中等规模的项目(30 个路由、15 个中间件)花了两天时间。最大的工作量在中间件的改写上,路由迁移基本就是改改语法。 总的来说,如果你在开始新项目,强烈推荐 Hono。如果是老项目迁移,评估一下中间件的迁移成本再决定。

← Back to Blog