Обработка запросов
Каждый файл layout.ts
и index.ts
внутри каталога src/routes
имеет возможность доступа к текущему HTTP-запросу, ответу и URL-адресу. Это позволяет вам получать и изменять данные, и даже отвечать пользовательским контентом.
Qwik City реализует систему промежуточного программного обеспечения, основанную на иерархии каталога src/routes
. Система промежуточного ПО используется для обработки HTTP-запросов и ответов и доступна для страниц, макетов и конечных точек.
Каждый маршрут может добавлять обработчики HTTP-запросов и ответов, что позволяет разработчикам получать и изменять данные. Обработчики также могут использоваться конечными точками, которые возвращают только данные, а не HTML-код страницы.
Эта возможность позволяет вам обрабатывать любое событие запроса, иметь побочные эффекты в конвейере запроса непосредственно перед рендерингом компонента и отвечать на него выбранным содержимым. Возможность доступна для маршрутов страниц, макетов и конечных точек, но не для обычных компонентов.
Обработчики запросов и ответов
На страницах, макетах и конечных точках мы можем получить доступ к данным запроса реализуя функции обработчика запроса, такие как onGet
, onPost
, onPut
и т.д. Эти функции выполняются в зависимости от HTTP-метода, используемого для данного маршрута.
Кроме того, функция onRequest
может быть использована для обработки любого метода запроса, а не конкретного, в виде middleware. Например, если объявлены две функции - onGet
и onRequest
, то для запроса с методом GET
будет вызвана функция onGet
. Однако, если бы пришел запрос с методом POST
, то была бы вызвана функция onRequest
, так как функция onPost
не была предусмотрена. Функция onRequest
доступна для всех методов запроса, для которых не указана конкретная функция.
import type { RequestHandler } from '@builder.io/qwik-city';
export const onGet: RequestHandler<ProductData> = async ({ params }) => {
// Здесь должен быть код доступа к вашей БД (сокращено для упрощения).
return {
skuId: params.skuId,
price: 123.45,
description: `Опсиание для ${params.skuId}`,
};
};
Событие запроса
Функции обработчика запроса получают аргумент RequestEvent
, который имеет следующие свойства:
Поле | Описание |
---|---|
request | Объект запроса |
response | Объект ответа, который можно использовать для установки headers и status ответа |
url | URL, который содержит pathname , hostname и т.д. |
next | Следующая функция промежуточного ПО |
abort | Запрос функции прерывания |
params | Пользовательские параметры, найденные в URL |
cookie | Получение и установка кук |
platform | Объект данных платформы (полезен для Cloudflare, Netlify и т.д.) |
Куки
interface Cookie {
get: (key: string) => CookieValue | null;
set: (key: string, value: string | number | Record<string, any>, options?: CookieOptions) => void;
delete: (key: string) => void;
has: (key: string) => boolean;
}
get
Принимает строку с названием ключа и возвращает CookieValue
, если значение присутствует, или null в противном случае.
interface CookieValue {
value: string;
json: <T = unknown>() => T;
number: () => number;
}
Полученное значение - это простой объект с тремя полями:
value
: Содержит значение куки в виде строки;json()
: ВыполняетJSON.parse()
над значением и возвращает результат;number()
: Выполняет функциюNumber()
над значением и возвращает результат.
getAll Возвращает объект со всеми куками, если таковые имеются. Этот метод требуется когда имена кук заранее неизвестны. Позволяет перебрать все куки.
set
Принимает ключ и значение и создает заголовок, который будет добавлен к ответу. Значение может быть типа string | number | Record<string, any>
.
В качестве третьего аргумента вы можете опционально передать запись типа CookieOptions
для установки дополнительных полей.
export interface CookieOptions {
domain?: string;
expires?: Date | string;
httpOnly?: boolean;
maxAge?: number | [number, 'seconds' | 'minutes' | 'hours' | 'days' | 'weeks'];
path?: string;
sameSite?: 'lax' | 'none' | 'strict';
secure?: boolean;
}
Более подробную информацию об этих атрибутах и их значениях можно найти в статье MDN о заголовке Set-Cookie.
delete
Добавляет к кукам заголовок с указанным ключом. Новый заголовок будет содержать дату истечения срока действия в поле expires
, указывая браузерам на необходимость его удаления.
cookie.delete('my-cookie');
cookie.set('my-cookie', 'deleted', new Date(0));
По желанию при удалении кук можно задать путь и/или домен. Если ваши куки были созданы с указанием пути/домена, необходимо установить эти поля, чтобы удаление имело эффект.
cookie.delete('my-cookie', { domain: 'https://qwik.builder.io', path: '/docs/' });
has
Удобный метод, возвращающий true
или false
в зависимости от наличия предоставленного ключа в куках.
cookie.has('my-cookie');