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
Огромное спасибо за предоставленную информацию. Изучаю Докер, давно искал рабочие способы запустить в нём Nest с Postgres, актуальные в 2022. И благодаря вам я в этом разобрался. Не бросайте канал, продолжайте и дальше снимать видео про Nest
Отличный контент, всё по полочкам. Продолжайте в этом духе, было очень интересно и полезно! Спасибо!
Спасибо было действительно интересно. Конечно за год кое что изменилось и походу разработки и повторения за тобой, приходилось фиксить кое какие моменты, но в целом твой код до сих пор работает с самыми последними версиями!
Очень крутой видос! Спасибо! Буду смотреть остальные и ждать новых!
на редкость классный контент нашел по несту. Продолжай записывать!
Красота!
Спасибо за доступное обьяснение!!
Спасибо! Много полезных мелочей увидел, которыми не пользовался.
Контент топ. Обязательно продолжайте!
В поддержку! Очень круто, на сентябрь 2022 приходится новичку править исходники чтобы стартовал проект, но контент уникальный👍
Класс!!! Кроме работы с докером еще и GraphQl поизучал!! спасибо за видео
Отличный курс, спасибо!
Спасибо, отличный урок!
Это лучший самоучитель по Докеру, который я видел. Всё запускается также как на экране. Круто.
На винде как то можно это запуститть?
Я на Винде вёл разработку
@@webmogilevtsev3177 что для этого надо, Docker Desktop?
@@tingol_ Повторял на виртуальной машине Ubuntu 20.04. Установил только сам Docker.
Да, еще чтобы винда работала с докером
Спасибо за видео!
Крутой урок, спасибо за помощь в Дискорде =)
С😀пасибо! Все по полочкам
спасибо за полезный контент
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
Thanks you too))
Потрясающий курс. У вас талант - грамотно и понятно объяснять. Браво
С нетерпением жду новых видео
Интересно было бы посмотреть как покрывать тестами GraphQL внутри Nest
жду видео с призмой)
Спасибо братик
Отличное видео, только тут не совсем full-stack, фронта не увидел, а так все ок, супер, спасибо за видео!
Смотри вторую часть видео, там фронт)
👍
Обьясните пожалуста кокой принцип работы после деплоя, сами данные бд получается лежат теперь удаленно? они вместе докер-контейнером улетели туда? и дальнейшие взаимодествия через новый апи осуществляется через этот апи к удаленной базе? или это только сам проект задеплоен а база данных это та что локально на пк в постгресе?
Отличное видео получилось. Есть вопросы:
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 ?
Александр, шикарный комментарий, спасибо!))
1) Ответ мы указываем и в сервисе и в револьвере, оборачивая все в Promise, так что мы всегда знаем возвращаемый тип) и да, мы конечно можем создать dto описав возвращаемый тип, ни что нам не мешает) dto это всего лишь объект с полями, он удобен для минимазации описания входящих типов, а также их валидации
2) Второй вопрос не понял.. Попробуй придумать пример для разбора
3) Запишу отдельное видео по созданию чата, почему бы нет, как раз на текущем проекте его сделал)
4) Нет, с Prisma не работал, но обязательно попробую, не зря же ее в документации приводят))
5) А тут прям тема на целый курс по Nestjs) тогда давайте так, я закончу текущий свой проект, все время съедает сейчас, потом запишу как продолжение этого проекта создание фронтенд части, а затем с большей периодичностью буду записывать небольшие видел, в которых буду разбирать различные темы по Nestjs, таким образом соберём целый туториал))
6) Да, верно, прилетает статус 200, один из вариантов в интерцепторе на клиенте перехватывать запрос и проверять в теле ответа наличие data: errors {}, кажется так там прилетает
@Alexandr E ну как дополнительные данные... Все их можно получать одним запросом. Тем и хорош graphql, мы в одним запросом настраиваем набор получаемых данных, думаю потом на примере будет понятнее))
У меня почему то не появляется папка pgdata когда создается таблица. Почему её нет?
Если у кого-то на моменте 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". Убил пол дня но заработало в конце концов
контент хороший))но) даже на скорости 1.5 кажется что чувак медленно говорит)) смотрел на 1.75
а как указать в запросе graphql сортировку полученного списка?
Можно сделать объект, например sortBy и передавать в теле запроса, где будут передаваться ключ - это наименование поля, а значение могут быть "ASC" или "DESC" и на сервере просто обрабатывать этот объект
@@webmogilevtsev3177 Т.е. штатных средств для пагинации в graphql нет? Нужно придумывать самому?
Вот на форуме аполло есть обсуждение community.apollographql.com/t/apollo-client-3-pagination-sorting/1227
Graphql это просто способ обращения к серверу, как обращаться необходимо описывать самому
супер вот ток не понимаю как миграций запускать без отдельного конфиг файла. а так только с аутолоудом работает
Спасибо!) да, я тоже задавался этим вопросом, для этого нужно в .env файле правильно указать названия переменных и тогда TypeORM их подхватит) запишу потом отдельно видео чисто миграции показать, чтобы не плодить кучу разных конфигов))
@@webmogilevtsev3177 спасибо хороший контент
Контейнер с постгресом нифига не запускается короче.....((((
*👍супер и привет от тренера по футболу!*
без таймкодов сложно
А у меня не заводится( 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'
Скорей всего не та версия TypeOrm стоит, я писал на 2+ версии
@@webmogilevtsev3177 а как пофиксить эту ошибку? та же фигня
@@user-eb5mc1ib4b type: config.get("TYPEORM_CONNECTION"),
Тип "(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"
Как это победить?
я обернул функцию Object.assign
я при запуске докер композ получаю ошибку /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
Попробуй поменять путь
env_file:
- ./.env.local
@@webmogilevtsev3177 пробывал та же ошибка
Ну хз, ищи где ошибся, лог явно говорит об ошибке
@@webmogilevtsev3177 перииминовал .env.local на .env и все ок