跳转到内容
搜索文档

中间件

最后更新 查看 MarkdownAgent 设置

中间件是可复用逻辑,可在 onRequest 函数之前运行。中间件通常是工具函数。错误处理、用户身份验证和日志记录是应用中常见的中间件候选场景。

添加中间件

中间件与标准 Pages Functions 类似,但中间件始终在项目的 /functions 目录下的 _middleware.js 文件中定义。_middleware.js 文件导出 onRequest 函数。中间件会在匹配同一 /functions 目录(含子目录)中任意 Pages Functions 的请求上运行。例如,functions/users/_middleware.js 会匹配 /functions/users/nevi/functions/users/nevi/123functions/users 的请求。

若要在整个应用(包括静态文件之前)运行中间件,请创建 functions/_middleware.js 文件。

_middleware.js 文件中,可导出 onRequest 处理器或其方法特定变体。以下示例中间件处理项目中 Pages Functions 抛出的任何错误。此示例使用请求处理器 context 对象中的 next() 方法:

export async function onRequest(context) {
	try {
		return await context.next();
	} catch (err) {
		return new Response(`${err.message}\n${err.stack}`, { status: 500 });
	}
}

链式中间件

可将 Pages Functions 数组导出为中间件处理器,从而串联多个要运行的中间件。以下示例处理项目 Functions 产生的任何错误,并检查用户是否已通过身份验证:

async function errorHandling(context) {
	try {
		return await context.next();
	} catch (err) {
		return new Response(`${err.message}\n${err.stack}`, { status: 500 });
	}
}

function authentication(context) {
	if (context.request.headers.get("x-email") != "[email protected]") {
		return new Response("Unauthorized", { status: 403 });
	}

	return context.next();
}

export const onRequest = [errorHandling, authentication];

在上述示例中,errorHandling 函数会先运行。它会捕获 authentication 函数及后续任意 Pages Functions 中的错误。

这篇文档对您有帮助吗?