Bootstrap API NodeJS

Не начинайте с нуля!

В Wolox мы разрабатываем самые разные проекты. Когда NodeJS вырос и превратился в одну из основных технологий разработки API, необходимость наличия Bootstrap стала очевидной. NodeJS не является стандартизированной технологией с жесткими соглашениями: существует множество библиотек с одинаковым поведением, разными структурами API, маршрутизаторами, регистраторами, конфигурациями и т. Д. Для работы на фабрике программного обеспечения с 15+ проектами NodeJS и более чем 25 разработчиками, использующими эту технологию, которые могут вращать проекты в любое время, требуется Bootstrap, чтобы поддерживать стандарты нашей организации и легко исправлять общие проблемы в наших проектах. Итак, мы создали нашу структуру и теперь делимся ею с вами!

Структура API

Наш корень включает в себя следующие папки:

  • Приложение: здесь мы помещаем все основные компоненты разработки. Позже мы углубимся в эту папку.
  • Config: эта папка используется для управления переменными среды. У нас есть индекс с именами переменных (обычно разделенных на секреты базы данных, полосы прокрутки и сеанса) и один файл для каждой среды, который может перезаписывать значение по умолчанию или добавлять определенные переменные env только для этой среды.
  • Документы: здесь у нас есть документы по API. Для документации мы используем DictumJS.
  • Миграции: это для наших миграций. Мы используем Sequelize в качестве ORM, и у нас есть индекс для проверки выполнения миграции. Наша политика заключается в том, чтобы остановить запуск среды разработки, если миграции не были выполнены, и запустить их автоматически в других средах.
  • Скрипты: мы используем эти папки для добавления всех начальных скриптов. У них есть точка входа и несколько скриптов, которые подготавливают Bootstrap к запуску нового проекта.
  • Тест: логика выполнения тестов здесь. В качестве фреймворка для тестирования мы используем Mocha и Chai.

Наша точка входа в API - это файл app.JS, в который мы импортируем и настраиваем Express. Некоторые конфигурации - это анализатор тела, корс, статические документы, порт и панель прокрутки.

Структура развития

Мы используем шаблон MVC в папке нашего приложения. Обычно интерфейс разрабатывается на ReactJS из-за их сложности, поэтому у нас нет представлений. Наши основные папки - это контроллеры, модели, промежуточное ПО, сервисы и регистраторы, и в их обязанности входит:

  • Контроллеры: каждый экспортированный метод контроллера должен получать запрос, ответ и следующие параметры от экспресс-доставки. В его обязанности входит проверка и форматирование запроса, вызов служб, моделирование методов и возврат форматирования ответа, если это необходимо. Также здесь следует производить обработку ошибок. Контроллеры сгруппированы по ресурсам, таким как пользователи, альбомы и так далее.
  • Логгер: мы используем логгер Winston с двумя уровнями, ошибками и полной историей. Мы сохраняем журналы в файлах с их отметками времени.
  • Промежуточное ПО: здесь мы добавляем нашу общую логику между контроллерами, обычно методы аутентификации или перенаправления с заголовками. Также здесь должна быть проверка запросов общего формата как параметров запроса или тела.
  • Службы: наши службы отвечают за взаимодействие с внешними службами и управление базами данных. Обычно у нас есть один файл на каждую внешнюю службу.
  • Модели: модель должна быть максимально простой, только поля и конфигурации Sequelize. Мы стараемся не вводить здесь логику, но разрешено выполнять конкретную проверку модели в соответствии с требованиями к паролю для пользователя.

Также у нас есть еще один важный файл: файлы маршрутов. Здесь мы определяем пути для экспресс-обработки с использованием метода промежуточного программного обеспечения и контроллеров и обработчика ошибок, который устанавливает коды состояния и общие сообщения об ошибках.

У проектов также может быть файл помощников. Помощник должен быть универсальным: он должен работать с любым проектом, поэтому здесь не может быть никакой бизнес-логики. Обычно существуют библиотеки-обертки, такие как наша обертка Момент.

Пакетные сценарии JSON

Самые полезные скрипты, которые мы создали с помощью NPM:

  • Консоль: мы запускаем нашу консоль узла, которая загружает модели и службы. Для получения дополнительной информации вы можете прочитать это: Статья Node REPL.
  • Комбинезон: проведите тестирование с Нью-Йорком.
  • Lint: у нас есть скрипты проверки и исправления линтов с использованием Eslint. Наша конфигурация Eslint будет объяснена в одном из следующих постов.
  • Перед фиксацией, перед запуском и предварительным тестированием: запустите проверку линта, чтобы никакая фиксация не могла быть выполнена без прохождения линтера, тестирования или запуска приложения.
  • Start-dev: мы используем Nodemon для запуска нашего приложения в режиме разработки.
  • Migrations: команда для запуска миграций с помощью Sequelize.

Следующие шаги

После двух лет использования Bootstrap нам удалось получить его очень полную версию. В любом случае, у нас есть много идей для новых функций и улучшений.
Мы хотим, чтобы Bootstrap выбрал базу данных, которая нужна проекту, и запустил ее с этой конфигурацией. Кроме того, это будет проверять Mongo с использованием Mongoose вместо Sequelize.
Мы открыли запрос Pull для конфигурации Factory Girl, которая создала экземпляры наших моделей для целей тестирования.

Мы хотим добавить проверку работоспособности по умолчанию, схемы JSON, для проверки параметров и Swagger для документации.
Тестирование Jest и прокси ES6 - это то, что принадлежит нам самим и входит в наш список ДОЛЖНО ДЕЛАТЬ.

И последнее, но не менее важное: мы хотим добавить сценарии для создания и настройки базы данных, например, create-db и drop-db.

Наш Express JS Bootstrap имеет открытый исходный код, и вы можете найти его здесь. Не стесняйтесь комментировать, что вы думаете о нашей структуре, пакетах, которые мы используем, и я хотел бы знать, каковы ваши проекты структуры NodeJS.

Спасибо за прочтение!