请求
断言传入请求的方法是预期类型,使用 isMethod
进行验证。
如果该方法不被允许,则将抛出 405 错误,消息为 "HTTP 方法不被允许"。
如果 allowHead
为 true
,则如果预期方法为 GET
,则将允许 HEAD
请求通过。
示例:
从请求 URL 中获取解析后的查询字符串对象。
示例:
获取请求主机名。
如果 xForwardedHost
为 true
,则会使用 x-forwarded-host
请求头(如果存在)。
如果未找到主机头,将默认为 "localhost"。
示例:
尝试从传入请求中获取客户端 IP 地址。
如果 xForwardedFor
为 true
,则会使用 x-forwarded-for
请求头(如果存在)。
如果无法确定 IP,将默认为 undefined
。
示例:
获取请求协议。
如果 x-forwarded-proto
头被设置为 "https",则将返回 "https"。您可以通过将 xForwardedProto
设置为 false
来禁用此行为。
如果无法确定协议,将默认为 "http"。
示例:
使用 getRequestProtocol
、getRequestHost
和 event.path
生成完整的传入请求 URL。
如果 xForwardedHost
为 true
,则会使用 x-forwarded-host
请求头(如果存在)。
如果 xForwardedProto
为 false
,则不会使用 x-forwarded-proto
请求头。
示例:
通过名称获取匹配的路由参数。
如果 decode
选项为 true
,将使用 decodeURI
解码匹配的路由参数。
示例:
获取匹配的路由参数。
如果 decode
选项为 true
,将使用 decodeURIComponent
解码匹配的路由参数。
示例:
从请求 URL 获取查询参数,并通过验证函数进行验证。
您可以使用简单的函数来验证查询对象,或者使用像 zod
这样的库来定义一个 schema。
示例:
获取匹配的路由参数,并通过验证函数进行验证。
如果 decode
选项为 true
,将使用 decodeURI
解码匹配的路由参数。
您可以使用简单的函数来验证参数对象,或者使用像 zod
这样的库来定义一个 schema。
示例:
检查传入请求的方法是否为预期类型。
如果 allowHead
为 true
,则允许 HEAD
请求通过(若预期方法为 GET
)。
示例:
获取传入请求的唯一指纹。
读取请求体并尝试使用 JSON.parse 或 URLSearchParams 进行解析。
示例:
尝试通过 readBody
读取请求体,然后使用提供的验证函数,如果验证失败则抛出验证错误,或返回结果。
您可以使用简单的函数来验证请求体,或使用像 zod
这样的库来定义一个 schema。
示例:
app.use("/", (event) => {
assertMethod(event, "GET");
// 处理 GET 请求,否则抛出 405 错误
});
app.use("/", (event) => {
const query = getQuery(event); // { key: "value", key2: ["value1", "value2"] }
});
app.use("/", (event) => {
const host = getRequestHost(event); // "example.com"
});
app.use("/", (event) => {
const ip = getRequestIP(event); // "192.0.2.0"
});
app.use("/", (event) => {
const protocol = getRequestProtocol(event); // "https"
});
app.use("/", (event) => {
const url = getRequestURL(event); // "https://example.com/path"
});
app.use("/", (event) => {
const param = getRouterParam(event, "key");
});
app.use("/", (event) => {
const params = getRouterParams(event); // { key: "value" }
});
app.use("/", (event) => {
const query = getValidatedQuery(event, (data) => {
return "key" in data && typeof data.key === "string";
});
});
示例:
import { z } from "zod";
app.use("/", (event) => {
const query = getValidatedQuery(
event,
z.object({
key: z.string(),
}).parse,
);
});
app.use("/", (event) => {
const params = getValidatedRouterParams(event, (data) => {
return "key" in data && typeof data.key === "string";
});
});
示例:
import { z } from "zod";
app.use("/", (event) => {
const params = getValidatedRouterParams(
event,
z.object({
key: z.string(),
}).parse,
);
});
app.use("/", (event) => {
if (isMethod(event, "GET")) {
// 处理 GET 请求
} else if (isMethod(event, ["POST", "PUT"])) {
// 处理 POST 或 PUT 请求
}
});
Body 工具
app.use("/", async (event) => {
const body = await readBody(event);
});
app.use("/", async (event) => {
const body = await readValidatedBody(event, (body) => {
return typeof body === "object" && body !== null;
});
});
示例:
import { z } from "zod";
app.use("/", async (event) => {
const objectSchema = z.object();
const body = await readValidatedBody(event, objectSchema.safeParse);
});