@HCEL

Как лучше реализовать структуру файлов/модулей в NestJS?

В доукментаций nest да и в общем статьях показывают архитектуру вида:
src/
   User/
       User.service.ts
       User.dto.ts
       User.controller.ts
   Auth/...
   ...

Т.е каждый модуль вынесен в отдельную папку, но при разработке у меня появилась проблема, когда к модулю авторизаций нужно использовать модуль JWT. По такой архитектуре я бы сделал так:
src/
   User/
       User.service.ts
       User.dto.ts
       User.controller.ts
   Auth/...
   JWT/...
   ...

Но зачем так делать, если JWT это локальный модуль Auth, он нигде не будет у меня использоваться кроме Auth.
src/
   User/
       User.service.ts
       User.dto.ts
       User.controller.ts
   Auth/
       Auth.service.ts
       JWT.service.ts
   ...


Это нормально, если делать так? Типо не будет ли потом в будущим каких то проблем с использованием? Может кто то уже пробовал так делать?

Лично я сам думаю вроде норм, если перенести этот модуль в другой проект, то я перенесу только 1 папку вместо 2.
  • Вопрос задан
  • 168 просмотров
Пригласить эксперта
Ответы на вопрос 1
Grapeoff
@Grapeoff
В чём концепция...?
Я сам долгое время пытался найти или придумать нормальную структуру для проектов на NestJS и вот к чему я смог прийти:
  1. Модули (речь идёт о программных модулях в принципе, не только о модулях в контексте Nest), которые нужны по всему проекту я кладу в папку common, примерами таких модулей могут служить некоторые DTO; сущности/модели; глобальные гарды и тд;
  2. Сами модули я кладу в корень /src, но, например, у меня на работе в проекте все модули лежат в папке modules, что, в принципе, тоже неплохо.
  3. Под каждый тип файла я создаю отдельную папку. Например, в папке модуля auth находятся папки: dto, services (если в модуле больше одного сервиса, то я создаю для них отдельную папку), если сервис один, то кладу его в корень папки модуля.
  4. Если проект реализует REST API, то путь к моим модулям совпадает с путями, определёнными в их контроллерах. Пример в одном из моих проектов: https://github.com/GrapeoffJS/CRMServer/tree/maste...

Также пример с использованием GraphQL: https://github.com/GrapeoffJS/grapecode-server/tre...

В вашем случае, я не совсем понимаю, зачем для JWT делать отдельный модуль. Просто сделайте сервис (в контексте модуля Auth), который будет делать вам токены.

PS. В вашем примере файлы именуются с большой буквы, но в nest принято всё именовать с маленькой буквы, также если имя вашего модуля/сервиса/контроллера/резолвера/чего-то ещё состоит из нескольких слов, то вы должны использовать snake-case. Примеры: email-confirmation.service.ts, update-user.dto.ts. То же самое относится и к директориям.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы