INTEGRITY Документация

Промежуточное ПО

Middleware представляет собой переиспользуемую логику, которая выполняется перед вашим onRequest функция. Middleware обычно представляют собой служебные функции. Обработка ошибок, аутентификация пользователей и логирование обычно реализуются как middleware в приложении.

Добавьте middleware

Middleware похож на обычные Pages Functions, но всегда определяется в _middleware.js файл в каталоге вашего проекта /functions директория. _middleware.js файл экспортирует onRequest функция. Middleware запускается для запросов, соответствующих любым Pages Functions в том же /functions директория, включая поддиректории. Например, functions/users/_middleware.js файл будет обрабатывать запросы к /functions/users/nevi, /functions/users/nevi/123 и functions/users.

Если вы хотите запускать middleware для всего приложения, в том числе перед статическими файлами, создайте functions/_middleware.js файл.

В _middleware.js файлы, вы можете экспортировать onRequest обработчик или любой из его вариантов для конкретных методов. Ниже приведён пример middleware, который обрабатывает любые ошибки, возникающие в Pages Functions вашего проекта. В этом примере используется 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 в качестве обработчика middleware. Это позволяет объединять в цепочку несколько middleware, которые нужно выполнить. В следующем примере обрабатываются ошибки, возникающие в 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.