release · 

H3 v2

🎉 H3 v2 现已正式稳定!它基于 Web 标准进行了全面重写,与大多数 v1 工具保持兼容,并且比 v1 更快、更精简。

Read more in Guide.
Read more in Migration.
import { H3, serve } from "h3";

const app = new H3().get("/", () => "⚡️ Tadaa!");

serve(app, { port: 3000 });

#🌐 优先采用 Web 标准

H3 v2 基于 Request、Response、URL 和 Headers 构建。处理程序接收 event.req(标准的 Request)和 event.url,并通过 event.res 设置响应头。

可以返回任意值(string、object、Response、stream、Blob 等),H3 会将其转换为 Response。

import { defineHandler } from "h3";

const handler = defineHandler(async (event) => {
  const { pathname, searchParams } = event.url;
  const accept = event.req.headers.get("Accept");
  const body = await event.req.json();

  event.res.headers.set("x-powered-by", "h3");
  return { hello: "web" };
});
Read more in 事件处理器.

#🚀 随处运行

同一个应用可运行在 Node.js、Bun、Deno、Cloudflare Workers、Service Workers 和浏览器中。💥 srvx 提供通用的服务器层;需要时,可以通过 event.req.runtime 获取特定运行时的信息。

#🌳 类 URLPattern 的路由

路由使用 🌳 rou3 v1,支持类似 URLPattern 的语法,包括命名参数、正则约束、可选和重复参数、分组及通配符。

app.get("/users/:id(\\d+)", (event) => event.context.params.id);
app.get("/blog/:id(\\d+){-:title}?", (event) => event.context.params);
app.get("/files/:path+", (event) => event.context.params.path);

rou3 仍通过树结构逐段匹配路由,因此查找速度很快。它与 URLPattern 有几处有意的差异,例如忽略一个尾部斜杠。完整语法和差异请参阅 rou3 路由模式文档。

Read more in 路由.

#🧩 中间件和插件

H3 v2 支持 (event, next) 中间件、内置工具(onRequest、onResponse、onError、basicAuth、bodyLimit 等),以及通过 definePlugin() 定义的可复用插件。

app.use(async (event, next) => {
  const body = await next();
  event.res.headers.append("x-middleware", "works");
  return body;
});
Read more in 中间件.

#🔒 类型安全

处理程序、响应和错误(HTTPError)均有类型定义。已验证的处理程序以及 body、query、params 校验可与任何 Standard Schema 库配合使用。

#📏 路由规则

全新的 h3/rules 引擎可通过一个配置对象,为一组路由添加请求头、重定向、CORS、缓存和代理规则。

import { routeRules } from "h3/rules";

app.use(
  routeRules({
    "/old/**": { redirect: "/new/**" },
    "/assets/**": { headers: { "cache-control": "s-maxage=31536000" } },
    "/api/**": { cors: true },
  }),
);
Read more in 路由规则.

#🧰 内置工具

H3 内置了 Cookie(包括分块 Cookie)、会话、CORS、代理、静态文件、缓存头、服务器发送事件、通过 🔌 crossws 实现的 WebSocket、JSON-RPC/MCP 工具,以及 h3/tracing 插件。

Read more in 工具.

#⬆️ 升级

大多数 v1 工具仍可继续使用,已弃用的 v1 名称也仍会导出,以便更轻松地升级。在 Node.js 上运行时,H3 v2 要求 Node.js >= 20.19。

Read more in 迁移指南.

#❤️ 特别感谢

感谢所有贡献者、测试 beta 版和候选发布版并反馈问题的每一位用户、社区成员、在开发期间持续使用 v2 的 Nitro 社区,以及让开源工作得以持续的赞助者。

欢迎加入我们的 Discord,分享你的使用体验和反馈!