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

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

При создании 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-слое в директории server/.

Прямые вызовы 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 есть встроенный слой хранилища с поддержкой нескольких источников и локальных ассетов.

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