# 嵌套应用
> H3 具有一个原生的 mount 方法,用于将嵌套的子应用添加到主实例中。
通常,H3 项目由一个或多个文件中定义的多个[事件处理器](/guide/basics/handler)组成(甚至可以[懒加载](/guide/basics/handler#lazy-handlers),以加快启动速度)。
有时将多个 `H3` 实例结合起来,或者使用其他团队使用的 HTTP 框架并将其挂载到主应用实例,会更加方便。H3 提供了一个原生的 [`.mount`](/guide/api/h3#h3mount) 方法来实现这一点。
## 嵌套的 H3 应用
H3 原生支持挂载子应用。挂载后,子应用的路由和中间件会与基础 URL 前缀**合并**到主应用实例中。
```js
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](https://hono.dev/) 或 [Elysia](https://elysiajs.com/))挂载到基础 URL 下。
传递给被挂载应用的 `request.url` 会移除基础前缀。
```js
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!")),
);
```
类似地,你可以在 [Hono](https://hono.dev/docs/api/hono#mount) 或 [Elysia](https://elysiajs.com/patterns/mount#mount-1) 中挂载 H3 应用。