GraphQL & React. Полный курс (Material-UI, Apollo, mLab)

Sdílet
Vložit
  • čas přidán 27. 07. 2024
  • #YauhenK #webDev #GraphQL #React
    Всех приветствую в курсе «GraphQL».
    В данном видео-курсе мы с вами разберём библиотек GraphQL. GraphQL - фактически это язык запросов или синтаксис, который описывает как запрашивать данные, созданный в компании Facebook в 2012 году. Его разработали в качестве альтернативы REST-архитектуры. Он позволяет клиенту запросить лишь желаемые данные. За все отвечает именно клиент. Т.е. GraphQL можно использовать не только на серверной, но и на клиентской стороне.
    Он имеет три основные характеристики:
    - Он позволяет клиенту точно указать, какие данные ему нужны.
    - Облегчает агрегацию данных из нескольких источников.
    - Использует систему типов для описания данных.
    ✒ Timeline:
    ✔ 0:00 - Введение
    ✔ 3:06 - Установка окружения
    ✔ 8:31 - Схема и корневой запрос
    ✔ 15:43 - Функция Resolve и тест запроса
    ✔ 23:28 - Новый тип и связь между типами
    ✔ 30:31 - Списки
    ✔ 37:11 - Мигрируем данные на mLab
    ✔ 43:34 - Добавляем Mongoose и обновляем Resolve
    ✔ 51:35 - Создаём первую мутацию
    ✔ 59:09 - Мутации для удаления и обновления
    ✔ 1:10:01 - Структура React приложения
    ✔ 1:16:11 - Объединяем Front-end и Back-end
    ✔ 1:22:04 - Отображаем реальные данный с БД
    ✔ 1:30:01 - Добавление элементов в БД
    ✔ 1:43:03 - Удаление элементов из БД
    ✔ 1:48:02 - Редактирование элементов в БД
    ✔ 1:55:26 - Поиск элементов в БД
    ✒ Репозиторий курса:
    ✔ GitHub: github.com/YauhenKavalchuk/gr...
    ✒ Используемые ресурсы и инструменты:
    ✔ Atom (Редактор кода): atom.io/
    ✔ Create React App (Рабочее окружение): github.com/facebook/create-re...
    ✔ mLab (База данных): mlab.com
    ✔ Material-UI (Интерфейс приложения): material-ui.com
    ✔ Apollo Client: www.apollographql.com/docs/re...
    ✒ Полезные ссылки:
    ✔ Graphql (Документация): graphql.org/learn/
    ✒ Полный список готовых и планируемых курсов:
    ✔ Trello: trello.com/b/R6rD7qq8
    ✒ Автор курса:
    ✔ CZcams: / yauhenkavalchuk
    ✔ Instagram: / yauhenkavalchuk
    ✔ Twitter: / yauhenkavalchuk
    ✔ VK: YauhenKavalchuk
    ✔ LinkedIn: / yauhenkavalchuk
    ✔ GitHub: github.com/YauhenKavalchuk
    ✔ VK (Группа): webdevcom
    ✒ Поддержать развитие канала: github.com/YauhenKavalchuk/yo...

Komentáře • 224

  • @duce201
    @duce201 Před 3 lety +4

    Спасибо огромное, за интересную тему!!!! Очень нравится твой канал!!!

  • @anazkomult
    @anazkomult Před 3 lety

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

  • @user-uz8hj8dz1x
    @user-uz8hj8dz1x Před 3 lety +10

    Отличный стек, жду к нему typescript и next.js

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 2 lety

      Уже есть такие курсы на канале)

  • @Ramosok
    @Ramosok Před 2 lety +1

    Просто супер всё что надо для начало работы, Спасибо.

  • @alekseytrump1586
    @alekseytrump1586 Před 3 lety +2

    Спасибо! Отличный канал!

  • @levapveeskela4327
    @levapveeskela4327 Před 3 lety

    Отличный и актуальный курс, даже своему подовану скинул, за разбиение на темы и время под видео отдельное спасибо, в общем жирный лайк и подписка!

  • @RomanSimonenko
    @RomanSimonenko Před 3 lety

    Круто! С самых основ и без воды!

  • @alexleshenko
    @alexleshenko Před 3 lety

    Тааак) я смотрю все самое полезное тут есть) это я удачно подписался)

  • @karnoumikhail
    @karnoumikhail Před 3 lety +2

    Золотой ты мой человек... спасибо!)

  • @serjdenisov2114
    @serjdenisov2114 Před 3 lety

    Евген спасибо!!! Искал инфу по теме и нашел твое видео, круто!!!!

  • @user-vm2db5cq1g
    @user-vm2db5cq1g Před rokem

    Отличный курс! Спасибо за видео!

  • @Hannah-ly6ff
    @Hannah-ly6ff Před 2 lety

    огромное Вам спасибо, очень полезное видео!

  • @uzver3787
    @uzver3787 Před 3 lety +1

    Хороший курс. Не всё было так гладко как в видео, пришлось посидеть, поразбираться, но в целом всё удалось и базовые знания и понятие в голове есть.
    Хотелось бы ещё + к этому typescript добавить.
    Спасибо!)

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety

      👍 по typescript есть отдельный курс. А связку 3х технологий пока рассматривать не планирую

    • @uzver3787
      @uzver3787 Před 3 lety

      @@YauhenKavalchuk можно ф-ц подход разобрать) с хуками.

  • @AlexeyYaricov
    @AlexeyYaricov Před 3 lety

    Очень легкое и доступное объяснение. Классно было-бы посмотреть урок про subscription на вебсокетах.

  • @anton_ovcharenko
    @anton_ovcharenko Před 3 lety

    Спасибо! Все очень понятно объяснено

  • @user-kg1cp5mq3z
    @user-kg1cp5mq3z Před 3 lety +3

    Спасибо большое за Ваши видео. Было бы очень интересно послушать и увидеть на практике про микросервисный фронтенд. Фреймворки Single-spa, Frint.js или что-то другое

  • @aleksandrmatyka3118
    @aleksandrmatyka3118 Před 3 lety

    Вы крутой, спасибо!дока докой но ваши видео очень помогают

  • @aliakseikaravaichyk1514

    Отлично, вечерком гляну

  • @user-en8fd9ut5q
    @user-en8fd9ut5q Před 3 lety

    Классный канал, спасибо!

  • @aleksandrhladun527
    @aleksandrhladun527 Před 3 lety +5

    Спасибо, класс! Было бы еще полезно разобрать как работает Apollo Cache

  • @user-xb5sx9hm4x
    @user-xb5sx9hm4x Před 3 lety

    Отличный гайд даже на текущий момент. Общее предложение принципа имеется

  • @duce201
    @duce201 Před 3 lety +23

    При запуске сервера выдал ошибку: TypeError: graphqlHTTP is not a function
    at Object. (G:\graphql\server\app.js:7:21) . Во второй строке надо написать так : const {graphqlHTTP} = require('express-graphql');

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety +1

      Это, видимо, новая версия синтаксиса. На момент записи курса была более ранняя

    • @duce201
      @duce201 Před 3 lety

      @@YauhenKavalchuk скорее всего да... потому что я залез в доку и там увидел....

    • @alekseytrump1586
      @alekseytrump1586 Před 3 lety +6

      const { graphqlHTTP } = require('express-graphql') вот так запиши

    • @konstantinkkk8397
      @konstantinkkk8397 Před 3 lety

      @@alekseytrump1586 а где ты нашел решение? я в документации graphql такого не нахожу. Буду очень благодарен

    • @alekseytrump1586
      @alekseytrump1586 Před 3 lety

      @@konstantinkkk8397 Не знаю какую вы официальную документацию читаете, но в документации прослойки (промежуточного) express-graphql, есть данное решение. Данное решение допилили в свое время ссылка вот github.com/graphql/express-graphql

  • @rtnjo6936
    @rtnjo6936 Před 3 lety +1

    Круто! Только сегодня учил на официалке по документам а тут вы

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety

      👍

    • @VSsoviet
      @VSsoviet Před 3 lety

      дока это документация, а не документ))

    • @rtnjo6936
      @rtnjo6936 Před 3 lety

      @@VSsoviet по пасспорту

    • @rtnjo6936
      @rtnjo6936 Před 3 lety

      @@VSsoviet инструкции

    • @rtnjo6936
      @rtnjo6936 Před 3 lety

      @@VSsoviet гайдам

  • @vova2966
    @vova2966 Před 3 lety

    Спасибо 😊

  • @oleksandrlysiuk3971
    @oleksandrlysiuk3971 Před 3 lety

    О, годнота подкатила

  • @user-nd3rb7hl8n
    @user-nd3rb7hl8n Před 3 lety

    Спасибо!

  • @alexfilmoney
    @alexfilmoney Před 3 lety +5

    29:29 - правильнее написать parent.directorId, чтобы код продолжил работать, если айдишники фильма и режиссера не совпадают. Спасибо за ролик!

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety +2

      Да, это опечатка с моей стороны

    • @iliyabrook2933
      @iliyabrook2933 Před 2 lety

      @@YauhenKavalchuk я просто добавил в каждый фильм directorName
      const DirectorType = new GraphQLObjectType({
      name: 'Directors',
      fields: () => ({
      _id: { type: GraphQLID },
      name: { type: GraphQLString },
      age: { type: GraphQLInt },
      movies: {
      type: new GraphQLList(MovieType),
      resolve(parent, args) {
      return Movies.find({ directorName: parent.movieName })
      },
      },
      })
      });
      также в квери чтоб можно было искать по имени фильма а не по id тоже
      movieName: {
      type: MovieType,
      args: { movieName: {type: GraphQLID} },
      resolve(parent, args) {
      return Movies.findOne({name: args.movieName});
      }
      },

    • @SN-jj6yh
      @SN-jj6yh Před 2 lety

      Cпасибо за помощь!!!!!!!!!!!!!!

  • @alexdanilov2525
    @alexdanilov2525 Před 3 lety +2

    Спасибо за бесплатный курс. В качестве улучшения я бы посоветовал автору вместо совета создавать руками записи на mlab (который переехал на Mongodb Atlas) выложить дамп уже созданной базы на гитхаб и люди смогут залить дамп базы на свой аккаунт в одну комманду без копирования данных руками

  • @nzmur6135
    @nzmur6135 Před 3 lety

    круто!

  • @ruslannikolenko9469
    @ruslannikolenko9469 Před 3 lety +8

    Нашел ошибку:
    22:25 - здесь на parent.id, а parent.directorId.
    А работает оно "верно" только по совпадению :) (у записи Id и directorID совпадают, равны 2)
    Надо-бы пометить это какой-нибудь аннотацией.
    Но сам курс годный, продолжаю смотреть, большое спасибо!

  • @dmitrywalker6582
    @dmitrywalker6582 Před 3 lety

    Очень годно

  • @beznamea9549
    @beznamea9549 Před 3 lety +1

    Евгений, как всегда блестяще!

  • @user-mu4my8fq2e
    @user-mu4my8fq2e Před 2 lety

    Моё почтение!

  • @user-wf8bu6mt2i
    @user-wf8bu6mt2i Před 3 lety

    Класний урок. Дякую!

  • @rv6819
    @rv6819 Před 3 lety +12

    у кого ошибка на 14:01 Error: Query fields must be an object with field names as keys or a function which returns such an object.
    решается исправлением Query:
    нужно movie обернуть в объект с ключом fields
    const QueryType = new GraphQLObjectType({
    name: 'Query',
    fields: {
    movie: {
    type: MovieType,
    args: { id: { type: GraphQLString } },
    resolve: (parent, args) => {

    }
    }
    }
    });

    • @arlenm1472
      @arlenm1472 Před 3 lety +1

      Спасибо

    • @3955006
      @3955006 Před 3 lety

      Почему у автора такой ошибки нет?

    • @SemenAlexndrovich
      @SemenAlexndrovich Před 2 lety

      Спасибо!

    • @alexandergorin9963
      @alexandergorin9963 Před 2 lety

      спасибо, помогло

    • @IvannaZyama
      @IvannaZyama Před 2 lety

      прежде чем глянуть комментарии - пол часа мучилась, не могла понять где этот объект он просит. Огромное спасибо. Действительно на видео ошибки такой нет - может какие-то настройки были до этого (((

  • @mrArmagedon1000
    @mrArmagedon1000 Před 2 lety

    Ультра полезно

  • @dmitriyyelovets3485
    @dmitriyyelovets3485 Před 2 lety +1

    Очень толковое объяснение и демонстрация. Но застрял на 7й лекции. Уже даже склонировал твой репозиторий, подключил базу. Но ответы по 7й лекции приходят null либо пустой массив. Если нетрудно можешь обновить? Возможно по-новому нужно обрабатывать id?

  • @copyprint5021
    @copyprint5021 Před rokem +1

    Полностью всё сделал как в видео-уроке, но на седьмом уроке, у меня так и не делает запрос на фильмы или режиссеры. На фильмы выдаёт - null, а на все фильмы - пустой массив. Естественно сейчас нет уже Mlab и я использовал MangoDB, но там принцип такой-же. Вероятно что-то сделал не так, но не могу понять что именно. Уже даже на гитХабе скачал архив и по npm install загрузил все библиотеки как у автора и всё-равно :(

  • @peg-legantoine7151
    @peg-legantoine7151 Před 3 lety

    Очень хороший курс, Лайк! Планируешь что-нибудь выпустить по теме JAMStack, Gatsby?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety

      Спасибо за отзыв, планирую выпустить по Gatsby

  • @user-zp8xz5fu2j
    @user-zp8xz5fu2j Před 3 lety

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

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety

      Пожалуйста

    • @user-yg8nh2ek6w
      @user-yg8nh2ek6w Před 3 lety

      Ну да, особенно когда фронтенд за тебя уже написан))) Лучше бы на 2 видео автор все разбил. Отдельно бек и отдельно фронт

    • @user-zp8xz5fu2j
      @user-zp8xz5fu2j Před 3 lety

      @@user-yg8nh2ek6w суть курса непосредственно в связке React c GraphQL, зачем тратить время на верстку и стили? + люди,которые такой курс смотрят с большой вероятностью уже понимают как писать простые интерфейсы по типу Material UI, и это ни к чему )

    • @user-yg8nh2ek6w
      @user-yg8nh2ek6w Před 3 lety

      @@user-zp8xz5fu2j я люблю когда все с нуля дается. Если в материал юай не работал то будешь сним сперва разбираться а не с графкьюэль

    • @user-zp8xz5fu2j
      @user-zp8xz5fu2j Před 3 lety

      @@user-yg8nh2ek6w я понимаю,что вы это любите
      Но теперь представьте, этот курс весь с нуля, вы посмотрели этот курс, все запомнили. А потом вы хотите посмотреть другой курс,посвящённый работе React + Node (Rest API), чтобы понять эту связку
      А там весь фронтенд пишется с нуля) интересно будет? Познавательно?
      К тому же в реальной работе все вообще иначе, в документации Apollo Graphql точно про стили никто рассказывать не будет

  • @ivolokha9146
    @ivolokha9146 Před 3 lety

    godno!

  • @aleksandrzelenskiy4000

    Классный курс, в репе только сервер

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před rokem +1

      В репе есть ветки, которые соответствуют урокам, там весь код

    • @aleksandrzelenskiy4000
      @aleksandrzelenskiy4000 Před rokem

      @@YauhenKavalchuk спасибо

  • @OnlyLuck1000
    @OnlyLuck1000 Před 3 lety

    Спасибо за ваш труд!
    Подскажите пожалуйста, стоит ли сейчас учить React-Redux(по видео на вашем канале) или лучше начать с GraphQL & React? (т.к. слышу от многих, что Redux устарел)

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety +1

      Стоит. Redux не устарел

    • @OnlyLuck1000
      @OnlyLuck1000 Před 3 lety

      @@YauhenKavalchuk Спасибо!)

    • @victormog
      @victormog Před 2 lety

      *GraphQL* - технология доступа к серверу (БД), а *Redux* - библиотека управления состоянием приложения...

  • @tamaraevpraksina6945
    @tamaraevpraksina6945 Před 3 lety

    Здравствуй, очень хороший курс, спасибо за полезные видео.
    у меня вопрос по установке GraphQL, если я работаю с typescript-react в проекте. Значит мне нужно устанавливать ' graphql-typescript-react --typescript' ?
    Благодарю за работу.

  • @WebEnv
    @WebEnv Před 3 lety +1

    При первом подключении выводит ошибку: "message": "Expected {} to be a GraphQL schema."
    В чем может быть проблема?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 2 lety

      В описании есть ссылка на репозиторий - можете сверить код

  • @rv6819
    @rv6819 Před 3 lety

    1:29:44 - у меня не отображался список кинчиков для director в таблице по этому таймингу - решил это добавив в модель описание поля для directorId: Schema.Types.ObjectId.
    В базе у меня айдишники для всех также прописаны как ObjectId. Если они прописаны как String, то и изменять не нужно
    const movieSchema = new Schema({
    name: String,
    genre: String,
    directorId:Schema.Types.ObjectId,
    watched: Boolean,
    rate: Number
    });
    Интересно, а правильней ли использовать ObjectId для перекрестных ссылок, или достаточно String? Спасибо

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety +1

      Полагаю, string достаточно

    • @rv6819
      @rv6819 Před 3 lety

      @@YauhenKavalchuk спасибо!

  • @user-fh9sm5mi3u
    @user-fh9sm5mi3u Před 3 lety

    Refetch query запрашивает полный список с бд или только diff? И нет ли возможности изменить локальный стейт на success мутации?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety

      Запрашивается полный список.

  • @victormog
    @victormog Před 2 lety +1

    Не затруднит написать (хотя бы в двух словах), что необходимо изменить при использовании React v.17+, т.е. сейчас?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 2 lety

      Немного поменялись импорты в Apollo и GraphQL, в комментах уже про это написали. Компоненты можно заменить на хуки, если хотите и enhancers - ХОКи в которых подключени GraphQL можно заменить на хуки с передачей аргументов. Звучит много, но если всё знать - миграция часов 5 максимум

  • @user-le1qz6vb5b
    @user-le1qz6vb5b Před 2 lety

    re-query => перезапрос
    Мне кажется, лучше чем резапрос :)

  • @superblinoff
    @superblinoff Před rokem

    Привет! Может кто подскажет где проблема: у меня не выводится список режисеров и фильмов, loading=true всегда и выходит что в поле data нет нужных данных, как-то рендер компонента не дожидается эти данные.

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před rokem

      К сожалению, не видя кода не могу помочь. Сверяйте с репозиторием - это максимум, что могу посоветовать

  • @StyBLR
    @StyBLR Před 3 lety

    без compose мне кажется тут что-то наподобие rest получается, т.е. ничего не меняется. Нельзя распопулейтить по запросу с веба просто по одной кнопке ничего.

  • @iliyabrook2933
    @iliyabrook2933 Před 2 lety

    включи в IDE подсказку об ошибках в словах, научно фантастический триллер пишется не так, а так Sci-Fi-Thriller, курс понравился =)

  • @eugenproca3421
    @eugenproca3421 Před 3 lety

    Крутой курс респект. Было бы не плохо дополнить курс, как вы сказали роутингом и пагинацией. Может еще что-то :)

    • @aysommer
      @aysommer Před 3 lety +1

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

  • @awakeupcall5336
    @awakeupcall5336 Před 3 lety

    29:30 что-то не понял, на что здесь именно указывает parent? почему parent.id а не parent.directorId?

  • @daniilukraine3611
    @daniilukraine3611 Před 3 lety +1

    на 8:10 правильно будет написать const { graphqlHTTP } = require('express-graphql');

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety

      Да, это обновлённый синтаксис

  • @alexeyveselov6439
    @alexeyveselov6439 Před 3 lety +1

    29:25 - не ошибка? Вроде должно быть return directors.find(director => director.id === parent.directorId)

  • @hpcforum
    @hpcforum Před 2 lety

    Добил курс, спасибо. Но жаль что на классовы компонентах, вот бы на хуках то же самое... Так же остались вопросы по поводу пагинации, бэкенда, валидации, тонкостей graphql, интеграции с php. А так же всё это в связке с typescript. Пойду гуглить.

  • @iGotton
    @iGotton Před 3 lety +1

    Оно конечно круто, стильно, можно, молодёжно. Но на hh в среднем 150 упоминаний на все вакансии. 150, Карл. У jquery 600 - чтобы понятно было.

  • @user-qj2yg1rn3j
    @user-qj2yg1rn3j Před 2 lety

    Есть вопрос, почему не создавали схему вот таким образом?
    var schema = buildSchema(`
    type Query {
    hello: String
    }
    `);

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 2 lety

      Не совсем понимаю что не так в моих вариантах создания

  • @user-rw2zh2ri4p
    @user-rw2zh2ri4p Před 3 lety

    у никого в начале запуска приложение не разбивалось?[nodemon] app crashed - waiting for file changes before starting...

  • @harry6390
    @harry6390 Před rokem

    А как сделать, чтобы запросы шли например на айпишку?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před rokem

      Добавить например fetch, как и в любых других компонентах

  • @bogdanch4945
    @bogdanch4945 Před 2 lety

    на 8 минуте ошибка, должно быть const {graphqlHTTP} = require(`express-graphql`) и сервер стартует

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 2 lety

      Это новый синтаксис, а не ошибка. На момент записи урока, как вы можете видеть, всё работало ок

  • @hpcforum
    @hpcforum Před 2 lety +1

    const { graphqlHTTP } = require('express-graphql');
    теперь надо писать так. иначе сервак падает в самом начале, не успев встать...

  • @Nikita-hr6ss
    @Nikita-hr6ss Před 3 lety +1

    Не могу понять зачем здесь используется recompose. Почему нельзя подключить graphql сразу в нужном компоненте?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety

      Скажем так, это "задел" на возможное расширение функциональности этого приложения

    • @Nikita-hr6ss
      @Nikita-hr6ss Před 3 lety

      @@YauhenKavalchuk Понял, спасибо. А с появлением функциональных компонентов, использовать recompose является распостраненной практикой на сегодняшний день или все-таки это уже как пережитки прошлого?

  • @andreyfedarovich9918
    @andreyfedarovich9918 Před 3 lety

    не совсем понятно как реализовываются вложенные мутации, например если бы у movie был бы массив тегов например, как его мутировать - неужели нужно теги создавать отдельным объектом и привязывать их через id

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety

      Нет, на самом деле, тут уже вопрос больше не к GraphQL, а к формату организации и хранения БД, а так же к схемам и MongoDB.

  • @Iafet223
    @Iafet223 Před 2 lety

    Скажите пожалуйста, в видео разобран SSR?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 2 lety

      Нет. SSR разобран в курсе по Next.JS, вышел на канале, совсем недавно

    • @Iafet223
      @Iafet223 Před 2 lety

      @@YauhenKavalchuk спасибо за ответ и за видео. там все таки ssr из коробки)

  • @user-mu4my8fq2e
    @user-mu4my8fq2e Před 2 lety

    я правильно понимаю что mlab больше не существует и нужно просто БД на atlass создать?

  • @hpcforum
    @hpcforum Před 2 lety

    теперь список директоров не выводит. а список фильмов выводит
    {
    "data": {
    "directors": []
    }
    }
    на сервере пишет что режиссеры есть

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 2 lety

      Не видя полного кода, я не могу сказать в чём проблема

  • @my_area-fenix9482
    @my_area-fenix9482 Před rokem

    Что за шрифт у идеешке?? как називается?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před rokem

      Если честно, то уже и не помню(

  • @DartMitai
    @DartMitai Před 3 lety

    Grpc for web? он будет поинтересней GrahQL

  • @Civilizer1976
    @Civilizer1976 Před 2 lety

    Для тех кто переделывает данный пример уже с новыми пакетами:
    "apollo-server-express": "^3.1.2"
    "mongoose": "^5.13.7"
    там где идёт разделение на отдельно typeDefs и resolvers, в резольверах придётся описать как заполнять поле director для его отображения в составе Movie при запросе.
    //для заполнения поля director в схеме Movie нужно выполнить следующий код в резольвере для movies
    Movie: {// название типа в схеме graphQL
    director: async(parent, args, context, info) => {//parent - родительский.
    return (await parent.populate('director').execPopulate()).director//заполнить и вернуть director
    }
    }
    //Для нахождения и заполнения массива фильмов созданных данным режиссёром: в резольвере для director добавить следующий код
    Director: {// название типа в схеме graphQL
    //поле-[массив] movies в типе Director
    movies: async (director, args, context, info) => {//director - родительский для поля movies
    //Найти фильмы (в коллекции/модели Movies) по по значению поля director = id данного (из модели Directors)
    return (await Movies.find({ director: director.id }))
    }
    }

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 2 lety

      👍

    • @Civilizer1976
      @Civilizer1976 Před 2 lety

      @@YauhenKavalchuk Оказывается exec() используется с запросом всех, а .execPopulate () используется с одним документом. Нужно это учитывать. И в каждом резольвере использовать соответствуючий вариант. Пришлось закомментировать общий резольвер для Movie и прописать в запросе на все фильмы след. конструкцию:
      async allMovies(parent, args, { Movies }, info) {
      try {
      -> const allMovies = await Movies.find().populate({path: 'director'}).exec()
      return allMovies
      } catch (error) {
      throw new Error(error)
      }
      },
      а в обработках запроса ОДНОГО фильма по id или создании фильма:
      async movie(_, { movieId }, { Movies }) {
      try {
      //проверить - есть-ли такой фильм
      const movie = await Movies.findById(movieId)
      if (movie) {//если есть, то:
      -> return movie.populate({path: 'director'}).execPopulate()
      } else {
      //если такого фильма нет то:
      throw new Error('Фильм не найден')
      }
      } catch (error) {
      throw new Error(error)
      }
      }

  • @vladyslavkravchenko5955

    на конец 2022 актуальный курс?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před rokem

      Актуально, чуть поменялся импорт подключения, а так всё ок

  • @aleksandrmikhailov3255

    А что за шрифт такой прикольный в атоме?

  • @denpol9956
    @denpol9956 Před 3 lety

    А gql точно уменьшает нагрузку на сервер? Уверены? Меня терзают смутные сомнения...

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety

      Пишут, что уменьшает) Не нужно запрашивать данные полностью, а можно порционально. Это 100% снижает. А вот на счёт количества запросов - это под вопросом

    • @denpol9956
      @denpol9956 Před 3 lety

      @@YauhenKavalchuk А что насчет оптимизации глубоих запросов к базе? Бэкендер не сможет их оптимизировать при росте проекта - вот я про что.

  • @user-qj2yg1rn3j
    @user-qj2yg1rn3j Před 2 lety

    А почему на классах? Вроде год всего, тогда на функциональном не "современнее" было писать?

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 2 lety

      Это перезалив, оригинальному курсу 3 года, тогда хуков не было

    • @user-qj2yg1rn3j
      @user-qj2yg1rn3j Před 2 lety

      @@YauhenKavalchuk ааа, ну. Всё равно спасибо. Мне очень зашло. Спустя год понадобился )

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 2 lety

      👍

  • @hpcforum
    @hpcforum Před 2 lety

    блин, и тут новая проблема "_id" : "ObjectId(62b8b1717cd270632ca1ed7d)", вот такие айдишники на сервере. как это всё связать с нашим монгустом? не проходят запросы.

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 2 lety

      Ещё раз повторюсь, не видя кода, не могу подсказать решение. Максимум что могу посоветовать это сравнить ваш код и код из репозитория

    • @user-lf7sg3ju2z
      @user-lf7sg3ju2z Před 2 lety

      решили проблему?
      у меня тоже сейчас такое(

    • @hpcforum
      @hpcforum Před 2 lety

      @@user-lf7sg3ju2z да. она сама как-то решилась) просто сел на другой день отдохнувший

  • @user-rm9sr1sq5o
    @user-rm9sr1sq5o Před 3 lety

    Что за шрифт стоит в редакторе ?

  • @filippgaponenko3331
    @filippgaponenko3331 Před 3 lety

    01:18:04 - рисуем остаток совы)

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety +1

      На самом деле данный курс о GraphQL, поэтому и не рассказывал имплементацию приложения. Только интеграцию GraphQL в React. Если вы смотрели отдельный курс по React на канале, то с пониманием кода проблем быть не должно

  • @RedkeiGost
    @RedkeiGost Před 2 lety

    Эксперемент с форматами?
    czcams.com/play/PLNkWIWHIRwMF2sVLwzRef0Cu5kzAOeRcu.html

  • @user-qj2yg1rn3j
    @user-qj2yg1rn3j Před 2 lety

    Вот нифига не создал базу БД, не фортануло мне

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 2 lety

      Бывает....

    • @user-qj2yg1rn3j
      @user-qj2yg1rn3j Před 2 lety

      @@YauhenKavalchuk всё ок. это оказывается теперь иначе всё там работает.

  • @ruslanaskarov5393
    @ruslanaskarov5393 Před 3 lety +1

    Ребят, я один такой , кто не смог войти в mLab?

  • @Civilizer1976
    @Civilizer1976 Před 2 lety +1

    Был-бы вообще красавчик, если-бы переснял видео уже с современными реалиями и используя пакет "apollo-server-express": "^3.1.2". Цены бы тебе не было...

  • @xeleos
    @xeleos Před 3 lety

    тут интереснее было бы с тайпскриптом

  • @evilLincoln
    @evilLincoln Před 3 lety

    Из видео совершенно не понял преимуществ graphQL перед rest - что там для каждого отдельного действия прописывать свой адрес, что здесь свою мутацию. Те же яйца, только в профиль.

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety

      GraphQL позволяет это делать на клиенте. Плюс конфигурировать ответ именно теме полями, которые нужны для странице. А не полностью возвращать данные

  • @alexdanilov2525
    @alexdanilov2525 Před 3 lety

    немного режет глаз старый ES5 в серверной части и классовые компоненты в реакте . Вероятно это сделано чтобы избежать лишних настроек компиляции, но в 2020 году уже без ES6/2015 на сервере никак и реакт уже в 2020 году не писали на классовых компонентах. Люди могут посмотреть ролик и реально начать писать по стандартам 5-7 летней давности

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 3 lety

      Этот курс - это перезалив. Оригинальный курс писался, когда хуков ещё не было

  • @user-qj2yg1rn3j
    @user-qj2yg1rn3j Před 3 lety

    Добавил в "Смотреть позже".
    Потом отпишусь

    • @YauhenKavalchuk
      @YauhenKavalchuk  Před 2 lety

      👍

    • @user-qj2yg1rn3j
      @user-qj2yg1rn3j Před 2 lety

      @@YauhenKavalchuk Часть "Новый тип..."
      return directors.find(director => director.id == parent.directorId)
      так правильнее) ошибка

  • @hpcforum
    @hpcforum Před 2 lety

    четвертый урок, (director => director.id === args.id); здесь тройное равенство не убрали, запрос не работает. ну как так можно. эх... зачем айди заворачивать в строки?