Guide

事件对象

事件对象携带传入请求、准备好的响应和上下文。

每当新的 HTTP 请求到达时,h3 内部会创建一个事件对象,并将其传递给事件处理器,直到发送响应为止。

事件会经过所有的生命周期钩子和可组合工具,用作上下文。

示例:

app.get("/", async (event) => {
  // 记录 HTTP 请求
  console.log(`[${event.req.method}] ${event.req.url}`);

  // 解析的 URL 和查询参数
  const searchParams = event.url.searchParams;

  // 尝试读取请求的 JSON body
  const jsonBody = await event.req.json().catch(() => {});

  return "OK";
});

H3 事件属性

event.context

上下文是一个包含关于请求的任意信息的对象。

你可以将自定义属性存储在 event.context 中,以便在各种工具间共享。

event.req

基于原生 Web Request 的传入 HTTP 请求信息,并包含额外的运行时扩展(参见 srvx 文档)。

app.get("/", async (event) => {
  const url = event.req.url;
  const method = event.req.method;
  const headers = event.req.headers;

  // (注意:请求体只能使用一次,可以用以下任一方法)
  const bodyStream = await event.req.body;
  const textBody = await event.req.text();
  const jsonBody = await event.req.json();

  return "OK";
});

event.url

访问完整解析后的请求 URL

event.res

基于部分 Response 选项 的准备好的 HTTP 响应。

示例:

app.get("/", (event) => {
  event.res.status = 200;
  event.res.statusText = "OK";
  event.res.headers.set("x-test", "works");

  return "OK";
});