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
的服务器实例,如 Hono 或 Elysia。
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
中移除。H3 应用属性
app.config
全局 h3 实例配置。
app.websocket
兼容 🔌 crossws 的 Websocket 钩子。