更多工具
更多 H3 实用工具。
基础
withBase(base, input)
Returns a new event handler that strips the event’s base URL before invoking the original handler.
示例:
const api = new H3()
.get("/", () => "Hello API!");
const app = new H3();
.use("/api/**", withBase("/api", api.handler));
事件
getEventContext(event)
获取事件的上下文,如果不存在,则在 req.context 上初始化一个新上下文。
isEvent(input)
检查输入是否为 H3Event 对象。
isHTTPEvent(input)
检查输入是否为具有 { req: Request } 签名的对象。
mockEvent(_request, options?)
中间件
bodyLimit(limit)
定义一个中间件,用于检查请求体的大小是否在指定限制内。
如果请求体大小超过限制,则抛出 413 请求实体过大错误。如果你需要自定义该情况的处理,请使用 assertBodySize。
onError(hook)
定义一个错误发生时运行的中间件。
你可以从处理器返回一个新的响应来优雅地处理错误。
onRequest(hook)
定义一个在每次请求时运行的中间件。
onResponse(hook)
定义一个在响应生成后运行的中间件。
你可以从处理器返回一个新的响应以替换原始响应。
WebSocket
defineWebSocket(hooks)
定义 WebSocket 钩子。
示例:
const hooks = defineWebSocket({
open: (peer) => peer.send("欢迎!"),
message: (peer, message) => peer.send(message.text()),
close: (peer) => console.log("已关闭", peer),
});
defineWebSocketHandler(http?)
定义 WebSocket 事件处理器。
默认情况下,非升级(普通 HTTP)请求会收到 426 Upgrade Required 响应。传入一个 http 处理器来改为处理这些请求,从而允许同一路由同时处理 WebSocket 升级和常规 HTTP 请求。WebSocket 升级请求始终会进入 hooks。
注意:http 处理器只处理非升级请求。若要拒绝或自定义升级握手本身,请改用 crossws 的 upgrade 钩子。
示例:
// 仅 WebSocket 路由(非升级请求会收到 `426 Upgrade Required`)
app.get(
"/_ws",
defineWebSocketHandler({
message: (peer, message) => peer.send(message.text()),
}),
);
示例:
// 在同一路由上同时处理 WebSocket 升级和普通 HTTP
app.get(
"/_ws",
defineWebSocketHandler(
{ message: (peer, message) => peer.send(message.text()) },
() => "发送 WebSocket 升级请求以连接。",
),
);
适配器
defineNodeHandler(handler)
defineNodeMiddleware(handler)
fromNodeHandler(handler)
fromWebHandler(handler)
toNodeHandler(app)
将 H3 应用实例转换为具有 (IncomingMessage, ServerResponse) => void 签名的 NodeHandler。