我国天文科学再迎突破,AI工具助力识别2700万天体天文学家们通过训练神经网络,成功实现了比以往任何时候都更清晰的宇宙观察。想象一下,如果需要标记天空...
2025-07-27 0
尤雨溪转发了一个推特,是 H3 ( Http 简写),
尤雨溪转发了一个推特,是 H3 ( Http 简写),研究了下,还挺有意思。下面我们来看看他的前世今生!
知识点 | 诞生年份 | 最新版本 | 简介 |
H3 | 2020 | v2 beta | 轻量级、快速且可组合的服务器框架。 |
学习等级 | 分类 | 官网 | |
中级 | 后端 | https://h3.dev/guide |
2020 年,为支撑 Nuxt 3 与 Nitro 的轻量化需求,H3 应运而生。“H3” 全称 H(TTP),读音 /eɪtʃθriː/(类似 h-3)。开发者戏称其诞生是“解决 Node.js 和 Web 标准割裂的临时方案”,却意外成长为跨运行时 HTTP 框架标杆。
安装启动
将 h3 作为依赖项进行安装:
npm i h3@beta
创建一个入口文件server.mjs
import { H3, serve } from "h3";const app = new H3().get("/", (event) => "⚡️ Tadaa!");serve(app, { port: 3000 });
然后就可以启动了
node --watch ./server.mjs
现在你可以在浏览器访问 http://localhost:3000
请求生命周期
-> 传入请求:fetch(request)->server.fetch(request)-> 接收请求: new H3Event(request) -> onRequest(event) -> h3.handler(event)-> 调度请求:[match route] -> middlewareA(middlewareB(route.handler(event)))-> 发送响应:Returned Value => Response -> onResponse(response) -> Response
路由处理
// 单路由app.get("/hello", () => "Hello world!");app.on("GET", "/hello", () => "Hello world!");// 多路由app .get("/hello", () => "GET Hello world!") .post("/hello", () => "POST Hello world!") .any("/hello", () => "Any other method!");app.all("/hello", (event) => `This is a ${event.req.method} request!`);// 动态路由// [GET] /hello/Bob => "Hello, Bob!"app.get("/hello/:name", (event) => { return `Hello, ${event.context.params.name}!`;});app.get("/hello/*", (event) => `Hello!`);// 通配符路由app.get("/hello/**", (event) => `Hello ${event.context.params._}!`);
中间件
// 全局中间件app.use((event) => { console.log(event);});// 全局通配符中间件app.use( "/blog/**", (event, next) => { console.log("[alert] POST request on /blog paths!"); }, { method: "POST", // match: (event) => event.req.method === "POST", },);// 注册中间件拦截app.use(async (event, next) => { const rawBody = await next(); // [intercept response] return rawBody;});// 路由中间件import { basicAuth } from "h3";app.get( "/secret", (event) => { /* ... */ }, { middleware: [basicAuth({ password: "test" })], },);// 工厂函数import { onRequest, onResponse, onError } from "h3";app.use( onRequest((event) => { console.log(`[${event.req.method}] ${event.url.pathname}`); }),);app.use( onResponse((response, event) => { console.log(`[${event.req.method}] ${event.url.pathname} ~>`, body); }),);app.use( onError((error, event) => { console.log( `[${event.req.method}] ${event.url.pathname} !! ${error.message}`, ); }),);
事件处理
// 定义事件import { H3, defineHandler } from "h3";const app = new H3();const handler = defineHandler((event) => "Response");app.get("/", handler);
响应
const handler = (event) => new Response(JSON.stringify({ hello: "world" }), { headers: { "content-type": "application/json;charset=UTF-8", }, });
横向对比 | H3 | Express | Hono |
包体积 (gzip) | 2.1KB | 16.7KB | 11.2KB |
多运行时支持 | ✅ | ❌ | ✅ |
Web 标准兼容 |
H3 的爆发印证了一个趋势:前端基础设施正从“大而全”转向“组合式轻量化”。它用三层架构证明:
1. 标准化优于私有方案
2. 性能可量化(µs 级优化)
3. 兼容性决定生存空间
正如作者所言:
“H3 的目标不是成为最大,而是做运行时与开发者间最薄的胶水层。”
(来源:H3官网 )
相关文章
我国天文科学再迎突破,AI工具助力识别2700万天体天文学家们通过训练神经网络,成功实现了比以往任何时候都更清晰的宇宙观察。想象一下,如果需要标记天空...
2025-07-27 0
赖清德又要“窜访”了,这次不仅带着天价采购清单向美国“交保护费”,连中南美洲“邦交国”也排队伸手要钱。可当台军狂买5万架无人机叫嚣“反登陆”时,解放军...
2025-07-27 0
克林顿当总统那会儿干了不少事,他自己后来承认有两件事特别后悔。一件是让乌克兰放弃核武器,另一件是支持中国加入世贸组织。这两件事现在看起来确实让他挺烦恼...
2025-07-27 0
中美贸易战又闹起来了,这次是特朗普二进宫后第三轮了。他一上来就点名斯科特·贝森特、霍华德·卢特尼克和杰米森·格里尔这三位大员去和中国过招,焦点是能源合...
2025-07-27 0
2025年7月17日,解放军出动了58架次军机和9艘军舰。它们同一天在台海巡航。这个数量打破了单日的记录,是新高。之前在4月9日,半天时间里就有58架...
2025-07-27 0
据广东省佛山市最新通报,从7月8日监测发现首例输入引起的基孔肯雅热病例以来,截至7月21日,佛山市累计报告基孔肯雅热确诊病例2659例,主要集中在顺德...
2025-07-27 0
硬件天花板已到,你的爱机该退休了随着苹果即将发布iOS26,一则消息让不少老用户心头一紧:iPhone XR、XS和XS Max三款机型将不再支持新系...
2025-07-27 0
7月24日早上6点多,释永信像往常一样更新了社交账号,这之后就没再发过内容,这位平时每天差不多发1.5条、有87万粉丝的方丈,突然没了动静。两天后,网...
2025-07-27 0
发表评论