H3 应用实例

H3 应用实例是 h3 服务器的核心,负责处理传入请求。

你可以使用 new H3() 创建一个新的 h3 应用实例:

server.mjs
import { H3 } from "h3";

const app = new H3(/* 可选配置 */);

H3 应用选项

初始化应用时可以传入全局应用配置。

示例: 创建一个启用详细日志的应用。

const app = new H3({ debug: true });

全局钩子

初始化 h3 应用时,可以注册全局钩子:

  • onError
  • onRequest
  • onBeforeResponse

这些钩子会在每次请求时调用,可用于为你的应用添加全局逻辑,如日志记录、错误处理等。

const app = new H3({
  onError: (error) => {
    console.error(error);
  },
  onRequest: (event) => {
    console.log("请求:", event.path);
  },
});

H3 应用方法

app.fetch(request, init?)

类似于 fetch 的 API,允许请求应用路由。

输入可以是 URL、相对路径或标准的 Request 对象。

返回的值是一个标准的 Response Promise。

示例:

const response = await app.fetch("/");

console.log(response, await response.text());

app.handler(event)

一个与 h3 兼容的事件处理程序,用于组合多个 h3 应用实例。

app.on(method, route, handler)

为指定的 HTTP 方法注册路由处理器。

app.[method](route, handler)

为指定的 HTTP 方法注册路由处理器(app.on(method, ...) 的快捷方式)。

app.all(route, handler)

为所有 HTTP 方法注册路由处理程序。

app.use(middleware, opts?)

注册全局中间件处理器。

app.use(middleware, opts?)

注册全局中间件处理器。

app.use(route, middleware, opts?)

注册在特定路由上运行的中间件处理程序。

app.mount(base, fetchHandler)

在基础 URL 下挂载一个兼容 .fetch 的服务器实例,如 HonoElysia

Example:

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!")),
  );
基础前缀将从传递给挂载应用的 request.url 中移除。
同样,您可以在 HonoElysia 中挂载 H3 应用。

H3 应用属性

app.config

全局 h3 实例配置。

app.websocket

兼容 🔌 crossws 的 Websocket 钩子。