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" };
});#🚀 随处运行
同一个应用可运行在 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 路由模式文档。
#🧩 中间件和插件
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;
});#🔒 类型安全
处理程序、响应和错误(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 },
}),
);#🧰 内置工具
H3 内置了 Cookie(包括分块 Cookie)、会话、CORS、代理、静态文件、缓存头、服务器发送事件、通过 🔌 crossws 实现的 WebSocket、JSON-RPC/MCP 工具,以及 h3/tracing 插件。
#⬆️ 升级
大多数 v1 工具仍可继续使用,已弃用的 v1 名称也仍会导出,以便更轻松地升级。在 Node.js 上运行时,H3 v2 要求 Node.js >= 20.19。
#❤️ 特别感谢
感谢所有贡献者、测试 beta 版和候选发布版并反馈问题的每一位用户、社区成员、在开发期间持续使用 v2 的 Nitro 社区,以及让开源工作得以持续的赞助者。
欢迎加入我们的 Discord,分享你的使用体验和反馈!
