Серверный движок
При разработке Nuxt мы создали новый серверный движок: Nitro.
Он поставляется со многими функциями:
- Кроссплатформенная поддержка Node.js, браузеров, сервис-воркеров и многого другого.
- Поддержка бессерверных сред из коробки.
- Поддержка маршрутов API.
- Автоматический код-сплиттинг и асинхронно загружаемые чанки.
- Гибридный режим для статических и бессерверных сайтов.
- Сервер разработки с горячей заменой модулей (HMR).
Слой API
Серверные эндпоинты API и middleware добавляются Nitro, который внутри использует h3.
Ключевые особенности:
- Обработчики могут напрямую возвращать объекты и массивы — они будут автоматически сериализованы в JSON
- Обработчики могут возвращать промисы, которые будут ожидаться (также поддерживаются
res.end()иnext()). - Вспомогательные функции для парсинга body, обработки файлов cookie, перенаправлений, заголовков и многого другого
Для получения дополнительной информации ознакомьтесь с документацией h3.
Прямые вызовы API
Nitro позволяет «прямой» вызов роутов через глобально доступный хелпер $fetch. В браузере это приведёт к HTTP-запросу к API на сервере, а при вызове на сервере — к прямому выполнению соответствующей функции, без лишнего сетевого запроса.
$fetch API использует 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-worker окружений.
Nuxt генерирует этот дистрибутив при запуске nuxt build в директории .output.
На выходе получается runtime-код для запуска вашего сервера Nuxt в любой среде (включая экспериментальные браузерные сервис-воркеры!) и обслуживания ваших статических файлов, что делает его настоящим гибридным фреймворком для JAMstack. Кроме того, Nuxt реализует собственный уровень хранения, поддерживая драйверы с несколькими источниками и локальные ассеты.