Серверный движок

Nuxt работает на новом серверном движке: Nitro.

При разработке Nuxt 3 мы создали новый серверный движок: Nitro.

Он поставляется со многими функциями:

  • Кроссплатформенная поддержка Node.js, браузеров, сервис-воркеров и многого другого.
  • Поддержка Serverless из коробки.
  • Поддержка маршрутов API.
  • Автоматический код-сплиттинг и асинхронно загружаемые чанки.
  • Гибридный режим для статических + serverless сайтов.
  • Девелопмент-сервер с горячей перезагрузкой модулей (HMR).

Слой API

Серверные эндпоинты API и middleware добавляются Nitro, который внутри использует h3.

Ключевые особенности:

  • Обработчики могут напрямую возвращать объекты/массивы для автоматически обработанного ответа JSON
  • Обработчики могут возвращать промисы, которые будут ожидаться (также поддерживаются res.end() и next()).
  • Вспомогательные функции для парсинга body, обработки файлов cookie, перенаправлений, заголовков и многого другого

Для получения дополнительной информации ознакомьтесь с документацией h3.

Подробнее о слое API читайте в директории server/.

Прямые вызовы API

Nitro позволяет «прямой» вызов роутов через глобально доступный хелпер $fetch. Это сделает вызов API на сервер, если запустить его в браузере, но напрямую вызовет соответствующую функцию, если запустить его на сервере, экономя дополнительный вызов 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 реализует собственный уровень хранения, поддерживая драйверы с несколькими источниками и локальные ассеты.

Подробнее о движке Nitro читайте на GitHub.