Full-stack приложение. NestJS TypeORM PostgreSQL GraphQL Docker. Часть 1. Backend

Поділитися
Вставка
  • Опубліковано 24 гру 2021
  • NestJS - лучший фреймворк для backend (ИМХО) на JavaScript + TypeScript
    В данном видео постарался просто показать как собрать небольшой проект для backend части приложения, в котором будет подключена база данных (в данном примере Postgres), управление БД через TypeORM, запросы с клиента через GraphQL, все это упакуем в Docker и научимся запускать через docker-compose. Я специально оставил ошибки с которыми столкнулся, т.к. работа программиста в большей мере сводится к решению ошибок))
    #NestJS #GraphQL #docker #postgres #TypeORM
    Исходники: github.com/mogilevtsevdmitry/...
    Поддержать выход новых видео: boosty.to/webmogilevtsev/ref
    Присоединяйтесь к группе в телеграмме t.me/webmogilevtsev

КОМЕНТАРІ • 61

  • @demonofindifference7884
    @demonofindifference7884 2 роки тому +3

    Огромное спасибо за предоставленную информацию. Изучаю Докер, давно искал рабочие способы запустить в нём Nest с Postgres, актуальные в 2022. И благодаря вам я в этом разобрался. Не бросайте канал, продолжайте и дальше снимать видео про Nest

  • @Ecto-Gamet
    @Ecto-Gamet 2 роки тому +8

    Отличный контент, всё по полочкам. Продолжайте в этом духе, было очень интересно и полезно! Спасибо!

  • @egorzdioruc1223
    @egorzdioruc1223 2 роки тому +4

    Спасибо было действительно интересно. Конечно за год кое что изменилось и походу разработки и повторения за тобой, приходилось фиксить кое какие моменты, но в целом твой код до сих пор работает с самыми последними версиями!

  • @alexr0v
    @alexr0v 2 роки тому +2

    Очень крутой видос! Спасибо! Буду смотреть остальные и ждать новых!

  • @pavelkulagin1508
    @pavelkulagin1508 Рік тому

    на редкость классный контент нашел по несту. Продолжай записывать!

  • @gvegasss
    @gvegasss Рік тому +1

    Красота!
    Спасибо за доступное обьяснение!!

  • @YaDebagger
    @YaDebagger 2 роки тому

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

  • @SlavaCh
    @SlavaCh 2 роки тому +2

    Контент топ. Обязательно продолжайте!

  • @user-ji7sm5hw1j
    @user-ji7sm5hw1j Рік тому

    В поддержку! Очень круто, на сентябрь 2022 приходится новичку править исходники чтобы стартовал проект, но контент уникальный👍

  • @user-uf7ry7qd1x
    @user-uf7ry7qd1x 2 роки тому

    Класс!!! Кроме работы с докером еще и GraphQl поизучал!! спасибо за видео

  • @snowiedigga
    @snowiedigga Рік тому +1

    Отличный курс, спасибо!

  • @iromashko
    @iromashko 2 роки тому +1

    Спасибо, отличный урок!

  • @user-iy7rm7dt8x
    @user-iy7rm7dt8x 2 роки тому +2

    Это лучший самоучитель по Докеру, который я видел. Всё запускается также как на экране. Круто.

    • @tingol_
      @tingol_ 2 роки тому

      На винде как то можно это запуститть?

    • @webmogilevtsev3177
      @webmogilevtsev3177  2 роки тому

      Я на Винде вёл разработку

    • @tingol_
      @tingol_ 2 роки тому

      @@webmogilevtsev3177 что для этого надо, Docker Desktop?

    • @user-iy7rm7dt8x
      @user-iy7rm7dt8x 2 роки тому

      @@tingol_ Повторял на виртуальной машине Ubuntu 20.04. Установил только сам Docker.

    • @webmogilevtsev3177
      @webmogilevtsev3177  2 роки тому

      Да, еще чтобы винда работала с докером

  • @adrobkov
    @adrobkov 2 роки тому +1

    Спасибо за видео!

  • @Kotekld
    @Kotekld 2 роки тому

    Крутой урок, спасибо за помощь в Дискорде =)

  • @alexeykornev4048
    @alexeykornev4048 3 місяці тому

    С😀пасибо! Все по полочкам

  • @jagajaga6908
    @jagajaga6908 4 місяці тому

    спасибо за полезный контент

  • @Whisper_Jonas
    @Whisper_Jonas 2 роки тому +2

    Thank you for this tutorial , i don't understand your language but your code is in english , it's very good .Thank you very much

  • @user-mb7kp1bl4w
    @user-mb7kp1bl4w 2 роки тому +1

    Потрясающий курс. У вас талант - грамотно и понятно объяснять. Браво
    С нетерпением жду новых видео

  • @dsbasko
    @dsbasko 2 роки тому +7

    Интересно было бы посмотреть как покрывать тестами GraphQL внутри Nest

  • @trustlang_ua
    @trustlang_ua 2 роки тому +1

    жду видео с призмой)

  • @Alex-bs2bk
    @Alex-bs2bk Рік тому

    Спасибо братик

  • @WLADIOS
    @WLADIOS 2 роки тому

    Отличное видео, только тут не совсем full-stack, фронта не увидел, а так все ок, супер, спасибо за видео!

    • @webmogilevtsev3177
      @webmogilevtsev3177  2 роки тому +1

      Смотри вторую часть видео, там фронт)

  • @demigodance
    @demigodance 2 роки тому +1

    👍

  • @mishakrasnonos6333
    @mishakrasnonos6333 9 місяців тому

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

  • @user-sc7by4nv1f
    @user-sc7by4nv1f 2 роки тому +4

    Отличное видео получилось. Есть вопросы:
    1) Что вы думаете об DTO в response ? Т.е. в Request используем InputType - указали поля которые прилетят, а в ответе ? Не всегда же будет в ответе type из graphql.
    2) Можете показать на примерах, описание resolvers в которых будем получать связанные данные (решаем проблему n+1, выбираем в запросе только перечисленные поля, что указал клиент) ?
    3) Можете привести пример как продолжение текущего проекта - использование union types ? например доделать функционал чата -> каждый юзер может создавать комнаты свои приватные(как раз будет фильтрация подписок) и subscriptions для сообщений
    4)Работали с Prisma вместе с nestjs ? Если да, то по вашему мнению, чем Prisma лучше/хуже чем TypeOrm ?
    5) Не могли бы вы на примере в каком-то видео, рассказать когда лучше применять и для чего надо filter, guard, pipes, Interceptors(их отличия и для каких ситуаций, что подходит лучше) ?
    6) Как обрабатывать и отдавать ошибки из nestjs в graphql лучше всего ?ведь почти всегда от сервера прилетает код 200,расскажите плиз из вашего опыта.
    Пожелания - добавляйте плиз тэги к видео, может стоит не делать такие длинные видео, а например по 20-25 минут, круто когда видишь поэтапную разработку какого-то проекта целиком, может стоит сделать голосовалку на тему для разработки проекта в связке nestjs+graphql ?

    • @webmogilevtsev3177
      @webmogilevtsev3177  2 роки тому +1

      Александр, шикарный комментарий, спасибо!))
      1) Ответ мы указываем и в сервисе и в револьвере, оборачивая все в Promise, так что мы всегда знаем возвращаемый тип) и да, мы конечно можем создать dto описав возвращаемый тип, ни что нам не мешает) dto это всего лишь объект с полями, он удобен для минимазации описания входящих типов, а также их валидации
      2) Второй вопрос не понял.. Попробуй придумать пример для разбора
      3) Запишу отдельное видео по созданию чата, почему бы нет, как раз на текущем проекте его сделал)
      4) Нет, с Prisma не работал, но обязательно попробую, не зря же ее в документации приводят))
      5) А тут прям тема на целый курс по Nestjs) тогда давайте так, я закончу текущий свой проект, все время съедает сейчас, потом запишу как продолжение этого проекта создание фронтенд части, а затем с большей периодичностью буду записывать небольшие видел, в которых буду разбирать различные темы по Nestjs, таким образом соберём целый туториал))
      6) Да, верно, прилетает статус 200, один из вариантов в интерцепторе на клиенте перехватывать запрос и проверять в теле ответа наличие data: errors {}, кажется так там прилетает

    • @webmogilevtsev3177
      @webmogilevtsev3177  2 роки тому

      @Alexandr E ну как дополнительные данные... Все их можно получать одним запросом. Тем и хорош graphql, мы в одним запросом настраиваем набор получаемых данных, думаю потом на примере будет понятнее))

  • @user-rq7zy3su5g
    @user-rq7zy3su5g 2 роки тому

    У меня почему то не появляется папка pgdata когда создается таблица. Почему её нет?

  • @yaroslavbulavin3613
    @yaroslavbulavin3613 Рік тому

    Если у кого-то на моменте docker-compose up --build падает ошибка
    "Error: Cannot find module '/app/dist/main.js'"
    тогда замените скрипт "start:prod": "node dist/main.js" на "start:prod": "node dist/src/main.js". Убил пол дня но заработало в конце концов

  • @dinarsharipov5022
    @dinarsharipov5022 Рік тому

    контент хороший))но) даже на скорости 1.5 кажется что чувак медленно говорит)) смотрел на 1.75

  • @user-sl1tw9vg8x
    @user-sl1tw9vg8x Рік тому

    а как указать в запросе graphql сортировку полученного списка?

    • @webmogilevtsev3177
      @webmogilevtsev3177  Рік тому +1

      Можно сделать объект, например sortBy и передавать в теле запроса, где будут передаваться ключ - это наименование поля, а значение могут быть "ASC" или "DESC" и на сервере просто обрабатывать этот объект

    • @user-sl1tw9vg8x
      @user-sl1tw9vg8x Рік тому

      @@webmogilevtsev3177 Т.е. штатных средств для пагинации в graphql нет? Нужно придумывать самому?

    • @webmogilevtsev3177
      @webmogilevtsev3177  Рік тому +1

      Вот на форуме аполло есть обсуждение community.apollographql.com/t/apollo-client-3-pagination-sorting/1227
      Graphql это просто способ обращения к серверу, как обращаться необходимо описывать самому

  • @gigakvachakhia4777
    @gigakvachakhia4777 2 роки тому +1

    супер вот ток не понимаю как миграций запускать без отдельного конфиг файла. а так только с аутолоудом работает

    • @webmogilevtsev3177
      @webmogilevtsev3177  2 роки тому +2

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

    • @gigakvachakhia4777
      @gigakvachakhia4777 2 роки тому

      @@webmogilevtsev3177 спасибо хороший контент

  • @user-yg8nh2ek6w
    @user-yg8nh2ek6w 2 роки тому

    Контейнер с постгресом нифига не запускается короче.....((((

  • @zladatv
    @zladatv 2 роки тому

    *👍супер и привет от тренера по футболу!*

  • @tayurus
    @tayurus Рік тому

    без таймкодов сложно

  • @Bugagych
    @Bugagych 2 роки тому

    А у меня не заводится( useFactory ругается на type: config.get('TYPEORM_CONNECTION')
    typeorm-options.interface.d.ts(44, 5): The expected type comes from property 'useFactory' which is declared here on type 'TypeOrmModuleAsyncOptions'

    • @webmogilevtsev3177
      @webmogilevtsev3177  2 роки тому

      Скорей всего не та версия TypeOrm стоит, я писал на 2+ версии

    • @user-eb5mc1ib4b
      @user-eb5mc1ib4b 2 роки тому

      @@webmogilevtsev3177 а как пофиксить эту ошибку? та же фигня

    • @tingol_
      @tingol_ Рік тому +4

      @@user-eb5mc1ib4b type: config.get("TYPEORM_CONNECTION"),

    • @lgofshteyn
      @lgofshteyn Рік тому

      Тип "(config: ConfigService) => Promise" не может быть назначен для типа "(...args: any[]) => TypeOrmModuleOptions | Promise".
      Тип "Promise" не может быть назначен для типа "TypeOrmModuleOptions | Promise".
      Тип "Promise" не может быть назначен для типа "Promise".
      Тип "void" не может быть назначен для типа "TypeOrmModuleOptions".ts(2322)
      typeorm-options.interface.d.ts(44, 5): Ожидаемый тип поступает из свойства "useFactory", объявленного здесь в типе "TypeOrmModuleAsyncOptions"
      Как это победить?

    • @moxfest
      @moxfest Рік тому

      я обернул функцию Object.assign

  • @anthonyfink633
    @anthonyfink633 Рік тому

    я при запуске докер композ получаю ошибку /usr/local/bin/docker-compose -f /Users/anthonyfink/Work/nestjs/nest-task-managment/docker-compose.yml -p nest-task-managment up -d
    WARN[0000] The "DB_USER" variable is not set. Defaulting to a blank string.
    WARN[0000] The "DB_PASS" variable is not set. Defaulting to a blank string.
    WARN[0000] The "DB_NAME" variable is not set. Defaulting to a blank string.
    WARN[0000] The "DB_PORT" variable is not set. Defaulting to a blank string.
    WARN[0000] The "DB_PORT" variable is not set. Defaulting to a blank string.
    1 error(s) decoding:
    * error decoding 'Ports': No port specified: :
    `docker-compose` process finished with exit code 15 хотя даже указал env_file:
    - .env.local

    • @webmogilevtsev3177
      @webmogilevtsev3177  Рік тому

      Попробуй поменять путь
      env_file:
      - ./.env.local

    • @anthonyfink633
      @anthonyfink633 Рік тому

      @@webmogilevtsev3177 пробывал та же ошибка

    • @webmogilevtsev3177
      @webmogilevtsev3177  Рік тому

      Ну хз, ищи где ошибся, лог явно говорит об ошибке

    • @anthonyfink633
      @anthonyfink633 Рік тому

      @@webmogilevtsev3177 перииминовал .env.local на .env и все ок