Zod: валидация Nestjs и контракты для React
HTML-код
- Опубликовано: 27 июл 2024
- Посмотрим, как можно использовать 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 - Заключение
🔗 Ссылки:
🎓 Мои курсы по разработке: purpleschool.ru
💬 Telegram канал с полезными советами:
t.me/purple_code_channel
Почему я не видел этот канал раньше. Очень хороший контент!
Спасибо!
Антон, какая ж это красота! Крутое решение. Определённо буду использовать его в проектах. Большое спасибо за видео)))
Спасибо!
всегда интересные и качественные видео!! Спасибо большое!
Пожалуйста!
стоит ли сейчас использовать nestjs-zod? Я прочитал что автор написал о том что пакет больше не поддерживается им
Спасибо за видео!
Как по мне, так это хорошая замена библиотеке class-validator
Но, на бэке для респонса использую Automapper. Что на счет его использования вместе с zod? Или может быть есть какая-то хорошая альтернатива автомапперу?
Спасибо! Вместе с автомаппером не использовал
Спасибо за видео!
Я еще видел вариант, когда берут какую-то спецификацию swagger/graphql и из нее кодгеном делают полноценную sdk для работы с бекендом
И тоже хранят в npm для удобного доступа. Что думаете о таком способе?
Вполне тоже вариант рабочий
Спасибо, видео просто огонь 🔥
А ответ от сервера тоже проходит валидацию через zod?
В данном примере нет, но можно сделать. Хотя при строгой типизации на беке это будет излишне
Очень полезное видео!!! http запросы через какое расширение делаешь?
Через httpie
Можно показать пример, как использовать ZOD для get запросов а именно с query params. Загвоздка в том, что все гет параметры считаются как string, в этом случае boolean и number не пройдут валидацию через zod. Спасибо заранее
В рамках Zod можно задать трансформацию при получении, а затем валидацию
круто)
покажи еще, плиз, генерацию опен-апи спеки и генерацию фетчеров для клиента
и было бы круто еще к этому премеру зод подключить, чтобы показать, как оно всё вместе) но раз там будет сваггер, то нет смысла контракты генерить по зоду, по спеке же будет всё генериться, да?
Про наличии контрактов не нужно городить отдельно Open API
@@PurpleSchool ну а как же спека
@@PurpleSchool или спеку тоже можно генерить?
я сейчас с проблемой столкнулся, для запуска frontend я использую vercel, он бесплатный и сильно упрощает запуск приложения. Но nestjs приложение там запускать нельзя или по крайне мере оно будет ограничено. Ктонибудб знает что можно использовать для такого же простого и удобного запуска nestjs как vercel?
railway
Антон, как ты добился такого вида статус бара в tmux?, визуально выглядит как nvchad. Я о нижней строке, это же tmux? И когда уже будет обзор на nvchad?)
Да, это он. У меня на канале есть видео его настройки. Nvchad будет следующим
@@PurpleSchool видео по tmux смотрел, просто интересно как сделал такой красивый статус бар в tmux, что он выглядит как статус бар nvchad-а))
Антон, добрый день! С интересом посмотрел видео. Пытаюсь накинуть в свой проект. Все замечательно работает: и входные данные валидируются и выходные парсятся в необходимый тип (теперь в ORM Prisma не надо заморачиваться с тем, какие поля вытаскивать в селект и т. ). Но возникли трудности с парсингом для полей типа Prisma.Decimal. Можете подсказать элегантное решение?
Мне кажется типы Prisma не надо использовать в dto
nestjs-zod в документации предлагают создавать схемы при помощи модифицированной версии zod'a и импортироваться из nestjs-zod/z. Я могу такую схему юзать на фронте тоже? Чем они отличаются? Просто добавлением дополнительных методов к уже имеющимся?
Чтобы использовать на фронте надо будет туда её и тянуть, а это не очень хорошее решение
оо, так это ж получается, что эти валидации теперь и в формочки можно подсовывать? чтобы бек лишний раз не дергать за ошибками, а на клиенте уже их светить
конечно
А где можно скачать твой конфиг консоли и vim?
Будет разбор и ссылка в следующем видео
Npm пакет получился публичным, возможно сделать приватным, но на уровне компании этим удобно пользоваться?
Можно, но нужно будет или npm платить 7$ за пользователя или делать свой приватный регистри.
@@PurpleSchool , понял, спасибо
Подскажи это Codeium делает подсказки?
Да, он самый
@@PurpleSchool круто, тоже его использую удобен для nvim, да и продуктивность в пару раз поднимает так точно на каких-то базовых вещах
Класс. Плавно подошли к монорепам?)
Тоже рассмотрим)
публиковать контракты в нпм конечно круто но можно глянуть в сторону git subtree
Да, тоже вариант
Только получается типы всегда не строгие? Например этот UserLoginResponse содержит accessToken?: string;
я тоже этого момента не понял. Щас пытаюсь переписать и у меня все типы не строгие, а призма требует строгие...
Нет, в типах он
type UserLoginResponse = {
accessToken: string;
}
под капотом оно делает не строгие типы. Я пытаюсь передать дто в сервис, в котором тип призмы и поле там строгое, не получается. Он жалуется, что некоторые поля опциональные@@PurpleSchool
Помню падал бек из-за NaN значения в zod😢
Ого, не ловил такое
По-моему, пропущена история подключения контрактов к nestjs внутри этого "монорепо".
Там нет подключения, ты просто ссылаешь на контракт, так как по сути это не монорепа
@@PurpleSchool добавлено в зависимости а-ля "bar": "file:///home/user/src/foo/bar"?
Если собрать все в монорепо, то не придется ничего никуда паблишить, ну и валидацию хочется делать как на фронте, так и на бэке. Ждем пока Камиль догадается подкинуть zod из коробки вместо отвратительного class-validator.
Пока нет на это намёков)
В этом видео так много Z, что можно случайно попасть в политическую партию)
🤣
В психбольницу
Все через z, ясно, вполне привычно
Так уж библиотека устроена
не могу понять как ютуб работает) 23 коментария всего но отображается 8
Тестировщиков на них нет)