Серверный посредник в Nuxt
Обработчик в server/routes
или server/api получает запрос
уже как готовую цель. Часть работы
удобнее вынести в общий слой: один
раз проставить заголовок, прочитать
URL или подготовить контекст для
всех серверных ответов. В Nuxt для
этого служит server/middleware.
Давайте изучим порядок выполнения.
Сначала отрабатывают файлы из
server/middleware, затем
подходящий маршрут или API. Посредник
тоже объявляют через defineEventHandler,
но если нужно, чтобы запрос дошёл
до маршрута, из функции не возвращают
тело ответа.
Структура с логом и маршрутом:
- /server/
- /middleware/
- log.js
- /routes/
- hello.js
- /middleware/
Посредник прочитает адрес через
getRequestURL, при необходимости
возьмёт сегменты из pathname
и добавит заголовок ответа x-hit.
Главное - не обрывать цепочку
лишним return с телом ответа:
export default defineEventHandler((event) => {
const url = getRequestURL(event);
setResponseHeader(event, 'x-hit', '1');
});
Маршрут по-прежнему отдаёт текст,
а заголовок x-hit приходит
от посредника. При GET на /hello
тело будет Hello, заголовок виден
во вкладке сети; тот же посредник
сработает и для других адресов:
export default defineEventHandler(() => 'Hello');
Сделайте серверный посредник,
который добавляет заголовок ответа
x-shop со значением demo.
Проверьте на любом серверном
маршруте, что заголовок x-shop
виден в ответе вместе с телом
маршрута.