嵌套应用
H3 具有一个原生的 mount 方法,用于将嵌套的子应用添加到主实例中。
通常,H3 项目由一个或多个文件中定义的多个事件处理器组成(甚至可以懒加载,以加快启动速度)。
有时将多个 H3
实例结合起来,或者使用其他团队使用的 HTTP 框架并将其挂载到主应用实例,会更加方便。H3 提供了一个原生的 .mount
方法来实现这一点。
嵌套的 H3 应用
H3 原生支持挂载子应用。挂载后,子应用的路由和中间件会与基础 URL 前缀合并到主应用实例中。
import { H3, serve } from "h3";
const nestedApp = new H3()
.use((event) => {
event.res.headers.set("x-api", "1");
})
.get("/**:slug", (event) => ({
pathname: event.url.pathname,
slug: event.context.params?.slug,
}));
const app = new H3().mount("/api", nestedApp);
在上例中,当访问 /api/test
URL 时,pathname
将是 /api/test
(实际路径),而 slug
将是 /test
(通配符参数)。
全局配置和钩子不会从嵌套应用中继承。请考虑始终从主应用中设置它们。
嵌套的 Web 标准应用
将一个兼容 .fetch
的服务器实例(例如 Hono 或 Elysia)挂载到基础 URL 下。
传递给被挂载应用的
request.url
会移除基础前缀。import { H3 } from "h3";
import { Hono } from "hono";
import { Elysia } from "elysia";
const app = new H3()
.mount(
"/elysia",
new Elysia().get("/test", () => "Hello Elysia!"),
)
.mount(
"/hono",
new Hono().get("/test", (c) => c.text("Hello Hono!")),
);