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 - Заключение

Комментарии • 64

  • @PurpleSchool
    @PurpleSchool  9 месяцев назад +1

    🔗 Ссылки:
    🎓 Мои курсы по разработке: purpleschool.ru
    💬 Telegram канал с полезными советами:
    t.me/purple_code_channel

  • @bekanur98
    @bekanur98 8 месяцев назад +2

    Почему я не видел этот канал раньше. Очень хороший контент!

  • @yatolstoy
    @yatolstoy 9 месяцев назад +2

    Антон, какая ж это красота! Крутое решение. Определённо буду использовать его в проектах. Большое спасибо за видео)))

  • @nickolaizein7465
    @nickolaizein7465 9 месяцев назад +1

    всегда интересные и качественные видео!! Спасибо большое!

  • @Dima-yw5kj
    @Dima-yw5kj Месяц назад

    стоит ли сейчас использовать nestjs-zod? Я прочитал что автор написал о том что пакет больше не поддерживается им

  • @froncast
    @froncast 9 месяцев назад +1

    Спасибо за видео!
    Как по мне, так это хорошая замена библиотеке class-validator
    Но, на бэке для респонса использую Automapper. Что на счет его использования вместе с zod? Или может быть есть какая-то хорошая альтернатива автомапперу?

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад

      Спасибо! Вместе с автомаппером не использовал

  • @user-mi6fo5hp2y
    @user-mi6fo5hp2y 9 месяцев назад

    Спасибо за видео!
    Я еще видел вариант, когда берут какую-то спецификацию swagger/graphql и из нее кодгеном делают полноценную sdk для работы с бекендом
    И тоже хранят в npm для удобного доступа. Что думаете о таком способе?

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад

      Вполне тоже вариант рабочий

  • @user-fk9ju6pn3v
    @user-fk9ju6pn3v 9 месяцев назад

    Спасибо, видео просто огонь 🔥
    А ответ от сервера тоже проходит валидацию через zod?

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад

      В данном примере нет, но можно сделать. Хотя при строгой типизации на беке это будет излишне

  • @MrSlapp150
    @MrSlapp150 8 месяцев назад

    Очень полезное видео!!! http запросы через какое расширение делаешь?

  • @bekanur98
    @bekanur98 6 месяцев назад

    Можно показать пример, как использовать ZOD для get запросов а именно с query params. Загвоздка в том, что все гет параметры считаются как string, в этом случае boolean и number не пройдут валидацию через zod. Спасибо заранее

    • @PurpleSchool
      @PurpleSchool  6 месяцев назад

      В рамках Zod можно задать трансформацию при получении, а затем валидацию

  • @romandeveloper7720
    @romandeveloper7720 9 месяцев назад

    круто)
    покажи еще, плиз, генерацию опен-апи спеки и генерацию фетчеров для клиента
    и было бы круто еще к этому премеру зод подключить, чтобы показать, как оно всё вместе) но раз там будет сваггер, то нет смысла контракты генерить по зоду, по спеке же будет всё генериться, да?

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад

      Про наличии контрактов не нужно городить отдельно Open API

    • @romandeveloper7720
      @romandeveloper7720 9 месяцев назад

      @@PurpleSchool ну а как же спека

    • @romandeveloper7720
      @romandeveloper7720 9 месяцев назад

      @@PurpleSchool или спеку тоже можно генерить?

  • @user-zi4gy8nk6d
    @user-zi4gy8nk6d 9 месяцев назад

    я сейчас с проблемой столкнулся, для запуска frontend я использую vercel, он бесплатный и сильно упрощает запуск приложения. Но nestjs приложение там запускать нельзя или по крайне мере оно будет ограничено. Ктонибудб знает что можно использовать для такого же простого и удобного запуска nestjs как vercel?

    • @cob41n
      @cob41n 9 месяцев назад

      railway

  • @alexandersergeev4500
    @alexandersergeev4500 9 месяцев назад +1

    Антон, как ты добился такого вида статус бара в tmux?, визуально выглядит как nvchad. Я о нижней строке, это же tmux? И когда уже будет обзор на nvchad?)

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад +1

      Да, это он. У меня на канале есть видео его настройки. Nvchad будет следующим

    • @alexandersergeev4500
      @alexandersergeev4500 9 месяцев назад

      @@PurpleSchool видео по tmux смотрел, просто интересно как сделал такой красивый статус бар в tmux, что он выглядит как статус бар nvchad-а))

  • @user-zg2vu3er7r
    @user-zg2vu3er7r 9 месяцев назад

    Антон, добрый день! С интересом посмотрел видео. Пытаюсь накинуть в свой проект. Все замечательно работает: и входные данные валидируются и выходные парсятся в необходимый тип (теперь в ORM Prisma не надо заморачиваться с тем, какие поля вытаскивать в селект и т. ). Но возникли трудности с парсингом для полей типа Prisma.Decimal. Можете подсказать элегантное решение?

    • @PurpleSchool
      @PurpleSchool  8 месяцев назад

      Мне кажется типы Prisma не надо использовать в dto

  • @aleksandrpetrov3938
    @aleksandrpetrov3938 6 месяцев назад

    nestjs-zod в документации предлагают создавать схемы при помощи модифицированной версии zod'a и импортироваться из nestjs-zod/z. Я могу такую схему юзать на фронте тоже? Чем они отличаются? Просто добавлением дополнительных методов к уже имеющимся?

    • @PurpleSchool
      @PurpleSchool  6 месяцев назад

      Чтобы использовать на фронте надо будет туда её и тянуть, а это не очень хорошее решение

  • @romandeveloper7720
    @romandeveloper7720 9 месяцев назад

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

  • @dominicpowers5938
    @dominicpowers5938 9 месяцев назад

    А где можно скачать твой конфиг консоли и vim?

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад

      Будет разбор и ссылка в следующем видео

  • @DmitryDevWeb
    @DmitryDevWeb 9 месяцев назад

    Npm пакет получился публичным, возможно сделать приватным, но на уровне компании этим удобно пользоваться?

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад +2

      Можно, но нужно будет или npm платить 7$ за пользователя или делать свой приватный регистри.

    • @DmitryDevWeb
      @DmitryDevWeb 9 месяцев назад

      @@PurpleSchool , понял, спасибо

  • @user-fi9tn1pr4m
    @user-fi9tn1pr4m 9 месяцев назад

    Подскажи это Codeium делает подсказки?

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад

      Да, он самый

    • @user-fi9tn1pr4m
      @user-fi9tn1pr4m 9 месяцев назад

      @@PurpleSchool круто, тоже его использую удобен для nvim, да и продуктивность в пару раз поднимает так точно на каких-то базовых вещах

  • @ilsrbn
    @ilsrbn 9 месяцев назад

    Класс. Плавно подошли к монорепам?)

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад +1

      Тоже рассмотрим)

  • @AlexanderSavchenko91
    @AlexanderSavchenko91 Месяц назад

    публиковать контракты в нпм конечно круто но можно глянуть в сторону git subtree

  • @gangnusvi
    @gangnusvi 9 месяцев назад

    Только получается типы всегда не строгие? Например этот UserLoginResponse содержит accessToken?: string;

    • @user-re7zb6oo2s
      @user-re7zb6oo2s 9 месяцев назад

      я тоже этого момента не понял. Щас пытаюсь переписать и у меня все типы не строгие, а призма требует строгие...

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад

      Нет, в типах он
      type UserLoginResponse = {
      accessToken: string;
      }

    • @user-re7zb6oo2s
      @user-re7zb6oo2s 9 месяцев назад

      под капотом оно делает не строгие типы. Я пытаюсь передать дто в сервис, в котором тип призмы и поле там строгое, не получается. Он жалуется, что некоторые поля опциональные@@PurpleSchool

  • @polioann
    @polioann 9 месяцев назад +1

    Помню падал бек из-за NaN значения в zod😢

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад

      Ого, не ловил такое

  • @CJIu3eHb
    @CJIu3eHb 9 месяцев назад +1

    По-моему, пропущена история подключения контрактов к nestjs внутри этого "монорепо".

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад

      Там нет подключения, ты просто ссылаешь на контракт, так как по сути это не монорепа

    • @CJIu3eHb
      @CJIu3eHb 9 месяцев назад

      @@PurpleSchool добавлено в зависимости а-ля "bar": "file:///home/user/src/foo/bar"?

  • @moon.trance
    @moon.trance 9 месяцев назад

    Если собрать все в монорепо, то не придется ничего никуда паблишить, ну и валидацию хочется делать как на фронте, так и на бэке. Ждем пока Камиль догадается подкинуть zod из коробки вместо отвратительного class-validator.

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад

      Пока нет на это намёков)

  • @biLLie_wiLLie
    @biLLie_wiLLie 9 месяцев назад +2

    В этом видео так много Z, что можно случайно попасть в политическую партию)

  • @dimovich85
    @dimovich85 9 месяцев назад

    Все через z, ясно, вполне привычно

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад +1

      Так уж библиотека устроена

  • @asktosimon
    @asktosimon 9 месяцев назад

    не могу понять как ютуб работает) 23 коментария всего но отображается 8

    • @PurpleSchool
      @PurpleSchool  9 месяцев назад

      Тестировщиков на них нет)