Nest.js | Boilerplate
Почему мы решили создать этот генератор? Основная идея заключается в том, чтобы разработчик не тратил свое время на сборку проекта: установку npm зависимостей, подключение базы данных, написание примитивных контроллеров, роутов, сервисов — а сразу перешел к созданию бизнес логики приложения.
Почему Yeoman? Для тех кто не знает, Yeoman — консольная утилита написанная на Node.JS. Прелесть этого инструмента в том, что он позволяет “скаффолдить” (строить структуру проекта в зависимости от нашего выбора). Да, можно было создать какой-то boilerplate с одним вариантом аутентификации, подключением к какой-то монге и т.д. — но мы решили воспользоваться возможностью дать пользователям выбор того, что им действительно пригодиться в проекте.
Вы можете выбрать тип аутентификации, session store, secret key ( поля могут быть разные, в зависимости от Вашего выбора) и в итоге получить хороший проект для старта.
Flowchart Вашего взаимодействия с генератором, чтобы получить готовый проект
Технологии которые мы использовали:
Мы используем airbnb, что является хорошей практикой. Так же код задокументирован/закомментирован с помощью nest.js swagger декотораторов. При разработке проекта командой, эти инструменты очень полезны, так как позволяют разработчикам “говорить на одном языке” — наследовать стиль написания, архитектуру.
Для развертывания апи мы добавили docker, docker-compose с помощью которых можем очень быстро поднять проект со всеми необходимыми сервисами, базами данных, что экономит очень много времени разработчику не заставляя самому настраивать рабочую среду для проекта.
Также мы даем выбор деплоя на Heroku чтобы разработчик в случае необходимости показал клиенту работающую апи не разбираясь в самом сервисе.
В проекте реализованы AuthComponent, и UserComponent. При расширении проекта, эти компоненты могут быть архитектурным примером для реализации последующих. Например, нужно будет добавить компонент News. Появится еще папка News, внутри которой:
- [component-name].controller.ts — главный файл компонента, который принимает request, response, и передает данные/нужный action в [component-name].service.ts,
- [component-name].service.ts — работа с бд,
- dto/[dto-name].dto.ts — валидация входящих параметров с помощью class-validator decorators.
- entities/[entity-name].entity.ts — описание монго схемы,
- interfaces/[interface-name].interface.ts — описание интерфейса сервиса
Для аутентификации, мы даем на выбор три варианта:
- Passport-local-strategy (email/password регистрация и аутентификация). Храним cookie сессии в mongo или redis или mysql
- JWT-auth (email/password регистрация и аутентификация). Возвращаем аутентифицированому пользователю токены, которые он может использовать для доступа к закрытым API роутам.
- OAuth 2.0 — (email/password регистрация пользователя, создание клиента). Для понимания как работает OAuth 2.0 — link
Наш проект на: