пробовал экспрес както не полноценно
Попробуй выбрать другой язык, может зайдет
Построй приложение так чтобы можно было любой хттп фреймворк подставить в качестве транспорта и будет не важно что там экспресс или ещё что
В Nest можно любой транспорт использовать. Даже Koa есть и Fastify
А голый http можно?
Теоретически можно, но не будет никаких Middleware, Роутеров и прочих фич фраемворка.
Фишка в том что я не хочу зависеть от нестовых решений и подходов. Нест интересен (если интерсен вообще) исключительно в качестве транспорта.
Транспорт там скорее http, а этот библиотеки для маршрутизации
Я бы сейчас новые проекты начинал на молекулере, как по мне, намного менее громоздкая штука, чем nest, и куда более независимая от различного рода транспортных решений.
Там, вроде как, один из основных разработчиков, русскоговорящий, можно легко получить ответ на интересующий вопрос/внести предложение по улучшению.
У молекулера даже мажорной версии нету, а бенчи под 8 версию ноды на офф сайте)
А каков выбор, nest не предлагать, тонны бестолковых абстракций, ради абстракций меня не устраивают, какие альтернативы?
Но он не диктует архитектуру, а это может быть важно. С одной стороны сделать на нём совсем плохо всё же проще, чем сделать совсем плохо в несте. С другой, сделать хорошо тоже проще, чем в несте А ещё его выбор снимает необходимость тратить много времени на инфраструктурные задачи (кеш, транспорт, валидация), но зато придётся больше тратить времени на архитектурные
Если не нужны абстракции, то может тогда проще взять го?
Ты неправильно понял мысль, у меня нужды в бестолковых абстракциях, где модуль сидит на модуле и интерсаптором с пайпами сервисом погоняет
Это как раз разделение ответственности, а не когда все всю логику по мидлварам рассовывают
Причем все эти абсракции не зависят от транспорта и применимы в разных видах приложений
Транспорт в nest http, какой там есть еще из коробки?
Это не претензия, я просто давно не смотрел на него и сужу по давней памяти.
Там их куча, http, rabbitmq, kafka, nats, redis, tcp и тд. А так же можно просто сделать консольное приложение (Сохранив все абстракции), ботов для тг, дискорда и ещё кучи чего. Если возможность писать свои транспорты, которые будут легко интегрироваться с абстракциями неста
И все это можно сделать , просто поменяв конфигурацию?
Мне тут кажется всё логичным и удобным, и нету привязки к транспорту Route handler может от куда угодно ожидать ввод
Мне не нравится, что проверку параметров нужно пихать в какие-то классы с декораторами
Там есть и альтернативные решения, на замену класс валидатору и класс трансформеру, но мне они кажутся менее удобными
Мне более удобной всегда будет казаться, простая схема, которую я положу рядом с методом, который вызывается
Если использовать typia, то можно вот так описывать валидацию interface CommentTag { /** * @type int */ type : number ; /** * @exclusiveMinimum 19 * @maximum 100 */ number ?: number ; /** * @minLength 3 */ string : string ; /** * @pattern ^[a-z]+$ */ pattern : string ; /** * @format date-time */ format : string | null ; /** * In the Array case, possible to restrict its elements. * * @minItems 3 * @maxItems 100 * @format uuid */ array : string []; }
Причем метод будет абстрагирован от REST и прочих протоколов
Можно и так, через тот же zod например
Есть большее число вариантов, чем две крайности И я согласен с Данилом, что в молекулере неплохо сделана скучная инфраструктурная часть. По крайней мере нестовые пайпы, гарды, интерцепторы и фильтры для меня мучение. Каждый раз расстраиваюсь если надо туда лезть
Ну нет. Ещё написав кучу контроллеров и декораторов
Это зависит от реализации транспорта. Например для переключения между rabbitmq, kafka, nats, redis не нужно ничего менять, кроме конфига самого модуля, если платформозависимые фичи в своём коде не юзались
То есть client request и response Могут быть сообщениями из брокера и в брокер и ничего не сломается?
А вот пример из молекулера. Валидаторы легко меняются, и так же легко пишутся кастомные. Если нужно, то прямо на месте
Зачем только целый нест тащить если можно без него обойтись ну да ладно Может и может
На мой взгляд нест небольшой
Там через Template Literal Types это сделано или просто нужно знать что вписывать? Если второе, то мне такой подход не нравится
Конкретно этот пример - дефолтный https://github.com/icebob/fastest-validator
Если ты про валидацию параметров, то в зависимости от библиотеки валидации
Я к тому, что в примере вот например написано from: "string|optional", если я напишу "stringg|optionall" тайпскрипт будет ругаться до запуска приложения на этапе статического анализа?
Ещё пока у меня не получалось обойтись без написания кода для смены Кафки на кролика. Хотя допускаю, что из-за специфики проекта Но в молекулере, кажется, что это была бы правка одной строки в конфиге даже с учётом специфики
Так и есть, брокеры меняются конфигом
Ну так не пиши так
Вряд ли Я вообще не тащил тс в молекулер. Это ж микросервисы. Они небольшие, со скромной кодовой базой, хорошо если пару тысяч строк кода суммарно. Зачем там тс
Так можно сказать про любую проблему)
Если ты не запускаешь код с hot reload во время разработки, то такая ошибка у тебя может остаться незамеченной, но если ты пишешь код, как любой адекватный человек и запускаешь его для проверки, то при перезапуске у тебя вывалится ошибка о некорректной схеме.
Нормально делай, нормально будет :D
Так можно выдумать любую проблему и притянуть тайпскрипт, как ее решение, но по факту если вы льёте код на сервера, даже не проверив его работоспособность тестами или простым запуском, то у вас проблемы, используете вы тс иди нет.
Fastify/Express + Koa (неофициальный)
И платформо-зависимые части. Обычно в документации явно пишется, что фича зависит от платформы.
что такое платформа в данном контексте?
Это всё http транспорт, ты перечисляешь библиотека для маршрутизации. Про остальное мне уже пояснили, что есть ws и mq
Термин из их документации. Та библиотека, средствами которой они навешивают функционал на HTTP сервер, короче Express/Fastify/...
Обсуждают сегодня