170 похожих чатов

Короче опять я со своим вопросом по архитектуре. сделал вот

такую штуку, "ручной DI.", в индекс файлах происходит "сборка" модуля и подставление зависимостей. но теперь столкнулся с проблемой например с реализацией authGuard - мидл вары которая будет проверяять авторизован ли юзер или нет. Я ее хочу использовать в роутах, но в то же время эта мидлвара должна импортнуть / как то получить usersRepostiory чтобы после разбора сессии - проверить юзера в базе и добавить его в контекст запроса если он был найден. Для этого он бы должен был импортнуть users/index.js чтобы получить "собраный" модуль но вот незадача - этот индекс же импортит роуты, в которых используется сам этот authGuard. короче circular dependency получается. как быть? что куда вынести? сам authGuard тоже "инжектить" как то? заранее спасибо, сорян за многабукаф.

35 ответов

16 просмотров

при каждом запросе лезть в базу вроде как не круто, хоть и иногда неизбежно, тут посмотри в сторону JWT. а циркуляция зависимостей решается выносом из цепочки в отдельную зависимость "двусторонней части", т.е. в твоём случае мидлвара, роуты и пользователи должны быть отдельные модули. (P.S. соответственно и точка входа в приложение - так же отделена всего ) ...ну и встречный вопрос, реально думаешь сделать лучше чем в nest.js ?

Ну вот да, поддержку предыдущего ответчика Ну а если хочешь, то и нест юзает какой-то плагин для di, забыл как называется

это не реальный проект, я конечно же мог подключить какой то typedi, tsyringe, inversify, или даже сам нест, но я хочу попробовать реализовать это без доп. зависимостей в базу лезть ок, давайте не будем начинать очередной спор про jwt :D

у неста самописный, и там ts, т.е. используется рефлексия и "магия типов"

я замечу что если не использовать DI, а обычные импорты, то такого не возникает, ведь routes/guard - верхний уровень, импортируют нижний services/repository т.е. стрелка только в одно сторону

Кто сказал JWT? 👀

Короче, сейчас в голову пришло создаешь класс с массивом и методом init class DI { private controllers = new Map(); add(controller) { this.controllers.set(controller, new controller()) } get(controller){ return this.controllers.get(controller); } }

А откуда зависимость юзеров от роутов?

можно плиз номер скрина чтобы я понял

роуты юзеров зависят от самого модуля

Я только текст читал.

возможно понимаю, тож эксперементирую, только с ECMA в целом, и думаю можно сделать лучше чем в nest, сегодня только возникла идея попробовать сделать nest.js на ELM, ну или как миниум на babel/ts с всякими фичами вроде import * as controllers from './controllers' т.е. автоиморт из дерикторий и генерация свагера сразу, не описывая тонны декораторв... в общем без декоратора в spring-like подходе ну никак же, не представляю как без них можно сделать удобный AuthGuard. Х.З. как писать на чистом node.js, для меня это тож самое что писать на чистом js для браузера.

посмотрите видос выше, там вполне нормальный апи с бизнес логикой на чистом джс сделан, ну только бабеля немного для импортов

И можно же через ес6 импорт. Вроде проблема цикл зависимостей решается.

Почитай про ес6 модули, там по другому импорты строятся. С телефона в кровати лежу, какие тебе примеры)

посмотрел на репо, чувство прекрасного от реализации требует чего-то попроще, в бизнес-логике много низкоурвневого кода, я считаю в nest.js его так же много, но и тут его в разы больше. Наверное это вкусовщина, однако уже сильно привык к лаконичности описаний.

А зачем req, res, next пробрасываешь в роутах?

проблема двусторонних зависимостей решаются чисто логически выносом глобальной зависимости в третье из двух, так чтоб двое ссылались на третье а третье ни на кого.

это общая рекомендация которая к сожалению не всегда работает

Ты пишешь router.get(req, res, next) = controller.method(req, res, next) А можно просто router.get(controller.method)

нельзя)) там тогда this теряется и получается this.usersRepository is undefined в контроллере

у вас контролер вызывает репозиторий

Если там простой круд без бизнес логики, то, как по мне, городить интеракторы/сервисы смысла нет

если это раз. два он простой сейчас

я пропустил слой сервисов, как верно подметил товарищ выше, но это не суть, потом могу на сервисы заменить

потом может не наступить

не будет времени исправлять

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

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
читать файл максимально быстро? странный вопрос))
zamtmn
53
Я хочу запустить свой проект в тг. Что-то между пирамидой и майнилкой. Еще подобного ничего не было. Уникальная идея. Нужен именно не бот, а приложение. С ввод, выводом тон...
Павел А.
6
а как бы вылезти из ИО, что то типа IO -> Ether или в какую сторону смотреть ? что то туплю
Fedor
14
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
How to create an OS in C? what to study?
Linus
18
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
Реально в одиночку написать игровой движок на Си?
ㅤ (SVO)
11
Карта сайта