Zod: валидация Nestjs и контракты для React
Посмотрим, как можно использовать Zod в связке с Nestjs для валидации данных и использовать полученные типы как контракты для React приложения.
🔗 Ссылки:
🎓 Мои курсы по разработке: purpleschool.ru
💬 Telegram канал с полезными советами:
t.me/purple_code_channel
Разделы видео:
0:00 - Введение
0:16 - Почему Zod
1:14 - Подготовка проекта
3:12 - Описание контрактов
8:15 - Валидация backend
11:57 - Тест запросов
13:27 - Контракты для frontend
16:44 - Заключение
Пікірлер: 64
🔗 Ссылки: 🎓 Мои курсы по разработке: purpleschool.ru 💬 Telegram канал с полезными советами: t.me/purple_code_channel
Антон, какая ж это красота! Крутое решение. Определённо буду использовать его в проектах. Большое спасибо за видео)))
@PurpleSchool
9 ай бұрын
Спасибо!
всегда интересные и качественные видео!! Спасибо большое!
@PurpleSchool
8 ай бұрын
Пожалуйста!
Почему я не видел этот канал раньше. Очень хороший контент!
@PurpleSchool
7 ай бұрын
Спасибо!
Спасибо, видео просто огонь 🔥 А ответ от сервера тоже проходит валидацию через zod?
@PurpleSchool
9 ай бұрын
В данном примере нет, но можно сделать. Хотя при строгой типизации на беке это будет излишне
Очень полезное видео!!! http запросы через какое расширение делаешь?
@PurpleSchool
8 ай бұрын
Через httpie
Спасибо за видео! Как по мне, так это хорошая замена библиотеке class-validator Но, на бэке для респонса использую Automapper. Что на счет его использования вместе с zod? Или может быть есть какая-то хорошая альтернатива автомапперу?
@PurpleSchool
9 ай бұрын
Спасибо! Вместе с автомаппером не использовал
Спасибо за видео! Я еще видел вариант, когда берут какую-то спецификацию swagger/graphql и из нее кодгеном делают полноценную sdk для работы с бекендом И тоже хранят в npm для удобного доступа. Что думаете о таком способе?
@PurpleSchool
8 ай бұрын
Вполне тоже вариант рабочий
круто) покажи еще, плиз, генерацию опен-апи спеки и генерацию фетчеров для клиента и было бы круто еще к этому премеру зод подключить, чтобы показать, как оно всё вместе) но раз там будет сваггер, то нет смысла контракты генерить по зоду, по спеке же будет всё генериться, да?
@PurpleSchool
9 ай бұрын
Про наличии контрактов не нужно городить отдельно Open API
@romandeveloper7720
9 ай бұрын
@@PurpleSchool ну а как же спека
@romandeveloper7720
9 ай бұрын
@@PurpleSchool или спеку тоже можно генерить?
стоит ли сейчас использовать nestjs-zod? Я прочитал что автор написал о том что пакет больше не поддерживается им
публиковать контракты в нпм конечно круто но можно глянуть в сторону git subtree
@PurpleSchool
Ай бұрын
Да, тоже вариант
Можно показать пример, как использовать ZOD для get запросов а именно с query params. Загвоздка в том, что все гет параметры считаются как string, в этом случае boolean и number не пройдут валидацию через zod. Спасибо заранее
@PurpleSchool
6 ай бұрын
В рамках Zod можно задать трансформацию при получении, а затем валидацию
Класс. Плавно подошли к монорепам?)
@PurpleSchool
8 ай бұрын
Тоже рассмотрим)
Антон, как ты добился такого вида статус бара в tmux?, визуально выглядит как nvchad. Я о нижней строке, это же tmux? И когда уже будет обзор на nvchad?)
@PurpleSchool
9 ай бұрын
Да, это он. У меня на канале есть видео его настройки. Nvchad будет следующим
@alexandersergeev4500
9 ай бұрын
@@PurpleSchool видео по tmux смотрел, просто интересно как сделал такой красивый статус бар в tmux, что он выглядит как статус бар nvchad-а))
я сейчас с проблемой столкнулся, для запуска frontend я использую vercel, он бесплатный и сильно упрощает запуск приложения. Но nestjs приложение там запускать нельзя или по крайне мере оно будет ограничено. Ктонибудб знает что можно использовать для такого же простого и удобного запуска nestjs как vercel?
@cob41n
9 ай бұрын
railway
nestjs-zod в документации предлагают создавать схемы при помощи модифицированной версии zod'a и импортироваться из nestjs-zod/z. Я могу такую схему юзать на фронте тоже? Чем они отличаются? Просто добавлением дополнительных методов к уже имеющимся?
@PurpleSchool
5 ай бұрын
Чтобы использовать на фронте надо будет туда её и тянуть, а это не очень хорошее решение
Антон, добрый день! С интересом посмотрел видео. Пытаюсь накинуть в свой проект. Все замечательно работает: и входные данные валидируются и выходные парсятся в необходимый тип (теперь в ORM Prisma не надо заморачиваться с тем, какие поля вытаскивать в селект и т. ). Но возникли трудности с парсингом для полей типа Prisma.Decimal. Можете подсказать элегантное решение?
@PurpleSchool
8 ай бұрын
Мне кажется типы Prisma не надо использовать в dto
оо, так это ж получается, что эти валидации теперь и в формочки можно подсовывать? чтобы бек лишний раз не дергать за ошибками, а на клиенте уже их светить
@PurpleSchool
9 ай бұрын
конечно
По-моему, пропущена история подключения контрактов к nestjs внутри этого "монорепо".
@PurpleSchool
9 ай бұрын
Там нет подключения, ты просто ссылаешь на контракт, так как по сути это не монорепа
@CJIu3eHb
9 ай бұрын
@@PurpleSchool добавлено в зависимости а-ля "bar": "file:///home/user/src/foo/bar"?
А где можно скачать твой конфиг консоли и vim?
@PurpleSchool
9 ай бұрын
Будет разбор и ссылка в следующем видео
Подскажи это Codeium делает подсказки?
@PurpleSchool
9 ай бұрын
Да, он самый
@user-fi9tn1pr4m
9 ай бұрын
@@PurpleSchool круто, тоже его использую удобен для nvim, да и продуктивность в пару раз поднимает так точно на каких-то базовых вещах
Npm пакет получился публичным, возможно сделать приватным, но на уровне компании этим удобно пользоваться?
@PurpleSchool
9 ай бұрын
Можно, но нужно будет или npm платить 7$ за пользователя или делать свой приватный регистри.
@DmitryDevWeb
9 ай бұрын
@@PurpleSchool , понял, спасибо
Помню падал бек из-за NaN значения в zod😢
@PurpleSchool
9 ай бұрын
Ого, не ловил такое
Только получается типы всегда не строгие? Например этот UserLoginResponse содержит accessToken?: string;
@user-re7zb6oo2s
9 ай бұрын
я тоже этого момента не понял. Щас пытаюсь переписать и у меня все типы не строгие, а призма требует строгие...
@PurpleSchool
9 ай бұрын
Нет, в типах он type UserLoginResponse = { accessToken: string; }
@user-re7zb6oo2s
9 ай бұрын
под капотом оно делает не строгие типы. Я пытаюсь передать дто в сервис, в котором тип призмы и поле там строгое, не получается. Он жалуется, что некоторые поля опциональные@@PurpleSchool
В этом видео так много Z, что можно случайно попасть в политическую партию)
@PurpleSchool
9 ай бұрын
🤣
@user-su5jx8od6z
9 ай бұрын
В психбольницу
Если собрать все в монорепо, то не придется ничего никуда паблишить, ну и валидацию хочется делать как на фронте, так и на бэке. Ждем пока Камиль догадается подкинуть zod из коробки вместо отвратительного class-validator.
@PurpleSchool
8 ай бұрын
Пока нет на это намёков)
Все через z, ясно, вполне привычно
@PurpleSchool
9 ай бұрын
Так уж библиотека устроена
не могу понять как ютуб работает) 23 коментария всего но отображается 8
@PurpleSchool
9 ай бұрын
Тестировщиков на них нет)