Серверный движок
При создании Nuxt мы разработали новый серверный движок — Nitro.
В нём реализовано следующее:
- Поддержка разных платформ: Node.js, браузер, service workers и др.
- Готовая поддержка serverless.
- API-маршруты (API routes).
- Автоматический code-splitting и асинхронная загрузка чанков.
- Гибридный режим: статика + serverless.
- Dev-сервер с hot module reloading.
API-слой
Серверные API-эндпоинты и middleware добавляет Nitro, внутри используется h3.
Основные возможности:
- Обработчики могут возвращать объекты/массивы — ответ автоматически отдаётся как JSON
- Обработчики могут возвращать промисы, они будут ожидаться (также поддерживаются
res.end()иnext()) - Хелперы для разбора тела запроса, работы с cookie, редиректов, заголовков и т.д.
Подробнее — в документации h3.
Прямые вызовы API
Nitro позволяет «напрямую» вызывать маршруты через глобальный хелпер $fetch. В браузере будет выполнен HTTP-запрос к серверу, а на сервере будет вызвана соответствующая функция без дополнительного сетевого запроса.
$fetch построен на ofetch, с возможностями вроде:
- автоматического разбора JSON-ответов (и доступа к сырому ответу при необходимости);
- автоматической обработки тела запроса и параметров с корректными заголовками
Content-Type.
Подробнее о возможностях $fetch — в ofetch.
Типизированные API-маршруты
При использовании API-маршрутов (или middleware) Nitro генерирует типы для этих маршрутов, если вы возвращаете значение, а не отправляете ответ через res.end().
Эти типы доступны при использовании $fetch() или useFetch().
Автономный сервер
Nitro собирает автономный серверный дистрибутив, не зависящий от node_modules.
В Nuxt 2 сервер не был автономным: для запуска нужна была часть ядра Nuxt через nuxt start (пакеты nuxt-start или nuxt) или программный запуск, что было хрупким и плохо подходило для serverless и service workers.
Nuxt создаёт этот дистрибутив при выполнении nuxt build в директорию .output.
В вывод входит runtime-код для запуска Nuxt-сервера в любой среде (включая экспериментальные browser service workers) и раздачи статики — это делает Nuxt полноценным гибридным фреймворком для JAMstack. Кроме того, в Nuxt есть встроенный слой хранилища с поддержкой нескольких источников и локальных ассетов.