Skip to content

Mount

WinterCG 是一个用于网页互操作运行时的标准。它得到了 Cloudflare、Deno、Vercel Edge Runtime、Netlify Function 和其他多种支持,允许网页服务器在使用 Web 标准定义(如 FetchRequestResponse)的运行时之间互操作。

Elysia 遵循 WinterCG 标准。我们经过优化以在 Bun 上运行,但也开放支持其他运行时。

理论上,这允许任何符合 WinterCG 标准的框架或代码一起运行,使得像 Elysia、Hono、Remix、Itty Router 等框架可以简单地在一个函数中共同运行。

遵循这一点,我们为 Elysia 引入了 .mount 方法,以便与任何符合 WinterCG 标准的框架或代码一起运行。

Mount

要使用 .mount只需传递一个 fetch 函数:

ts
import { Elysia } from 'elysia'

const app = new Elysia()
    .get('/', () => 'Hello from Elysia')
    .mount('/hono', hono.fetch)

一个 fetch 函数是一个接受 Web 标准请求并返回 Web 标准响应的函数,其定义为:

ts
// Web 标准请求类对象
// Web 标准响应
type fetch = (request: RequestLike) => Response

默认情况下,以下声明被使用:

  • Bun
  • Deno
  • Vercel Edge Runtime
  • Cloudflare Worker
  • Netlify Edge Function
  • Remix Function Handler
  • 等等。

这使您可以在单个服务器环境中执行上述所有代码,并使与 Elysia 的无缝交互成为可能。您还可以在单个部署中重用现有功能,从而消除管理多个服务器所需的反向代理。

如果框架也支持 .mount 函数,您可以深层嵌套一个支持该功能的框架。

ts
import { Elysia } from 'elysia'
import { Hono } from 'hono'

const elysia = new Elysia()
    .get('/', () => 'Hello from Elysia inside Hono inside Elysia')

const hono = new Hono()
    .get('/', (c) => c.text('Hello from Hono!'))
    .mount('/elysia', elysia.fetch)

const main = new Elysia()
    .get('/', () => 'Hello from Elysia')
    .mount('/hono', hono.fetch)
    .listen(3000)

重用 Elysia

此外,您可以在服务器上重用多个现有的 Elysia 项目。

ts
import { Elysia } from 'elysia'

import A from 'project-a/elysia'
import B from 'project-b/elysia'
import C from 'project-c/elysia'

new Elysia()
    .mount(A)
    .mount(B)
    .mount(C)

如果传递给 mount 的实例是一个 Elysia 实例,它将通过 use 自动解析,默认提供类型安全和 Eden 支持。

这使得互操作框架和运行时的可能性成为现实。