Полный Full Stack курс ReactJS + NodeJS для начинающих за 4 часа! (MongoDB, Express, React, NodeJS)

Поділитися
Вставка
  • Опубліковано 26 чер 2024
  • В этом видео ты научишься с нуля разрабатывать бэкенд на стэке MERN (MongoDB, Express, React, NodeJS) и подключать к фронтенду свой бэкенд. Также, к завершению урока ты научишься деплоить своё приложение на Heroku + Vercel.
    Курс идеально подойдёт для новичков, которые впервые решили попробовать NodeJS.
    👀 Чему ты научишься?
    1. Разрабатывать свой бэкенд
    2. Делать авторизацию и регистрацию backend + frontend
    3. Работать с базой данных (MongoDB)
    4. Разработке full stack проектов
    5. Делать загрузку файлов на сервер
    6. Подключать аутентификацию с помощью JWT
    7. Взаимодействовать фронтенд с бэкендом
    8. Деплоить фулл стэк приложение
    ⚙️ Программы:
    Insomnia - insomnia.rest/download
    MongoDB Compass - www.mongodb.com/products/compass (нужен VPN для доступа к скачиванию)
    📚 Готовые исходники: t.me/archakov_im/522
    🔗 Ссылки по материалу:
    - Vercel - vercel.com
    - Heroku - www.heroku.com
    - Офф. сайт JWT - jwt.io
    - Список HTTP-кодов - ru.wikipedia.org/wiki/%D0%A1%...
    🔗 Следите за обновлениями и информацией в:
    - Telegram-канале: t.me/archakov_im
    - VK: archakov_im
    - Личном блоге: archakov.im
    - GitHub: github.com/Archakov06
    - Моё резюме: career.habr.com/archakovim
    ⏰ Таймкоды:
    00:00:00 Бэкенд (начало)
    00:00:28 Теория по бэкенду
    00:08:26 Начало разработки бэкенда
    00:10:25 Установка библиотеки Express
    00:10:57 Подключаем модульный подход для NodeJS (import, export, es6 и т.п.)
    00:12:15 Начинаем разработку приложения на Express
    00:19:11 Делаем HTTP-запросы на приложение через Insomnia
    00:20:05 Создаем тестовую авторизацию
    00:23:26 Подключаем JSON Web Token (JWT)
    00:27:08 Делаем регистрацию + подключаем базу данных MongoDB
    00:31:18 Создаем модель UserModel
    00:36:07 Устанавливаем Express Validator и подключаем в проект
    00:44:38 Создаем пользователя в БД
    00:45:45 Шифруем пароль с помощью BCrypt
    00:48:45 Подключаемся к БД через программу MongoDB Compass
    00:51:47 Обрабатываем ошибки
    00:57:17 Скрываем пароль юзера из ответа
    00:58:35 Делаем реальную авторизацию
    01:04:53 Делаем роут на получение информации о профиле
    01:05:52 Создаем middleware (функцию посредник) - checkAuth.js
    01:16:47 Делаем небольшой рефакторинг index.js
    01:19:52 Создаем функционал для статей (CRUD)
    01:50:18 Делаем загрузку картинок на сервер (Multer)
    01:56:10 Возвращаем статические файлы (загруженные картинки)
    01:57:54 Создаем middleware - handleValidationErrors.js
    02:01:06 Рефакторим итоговый код бэкенда
    02:05:09 Фронтенд
    02:06:22 Изучаем структуру фронтенд проекта
    02:09:16 Подключаем React Router
    02:13:34 Подключаем Redux Toolkit
    02:15:26 Создаем slice для статей (posts)
    02:19:20 Настраиваем Axios
    02:21:13 Исправляем ошибку CORS
    02:23:23 Создаем асинхронный action в Redux Toolkit
    02:25:32 Сохраняем в стейт статус запроса и сами статьи
    02:32:58 Вытаскиваем тэги из бэкенда
    02:36:28 Делаем вывод полной записи
    02:44:01 Создаем функционал для авторизации
    03:00:10 Проверяем авторизован пользователь или нет
    03:06:00 Сохранять токен в LocalStorage, чтобы не выкидывало из аккаунта
    03:16:55 Делаем форму регистрации
    03:24:38 Разрешаем удалять статью только автору
    03:27:44 Форма создания статьи + Simple Editor
    03:34:24 Загрузка изображения на сервер
    03:43:04 Отправка статьи на бэкенд
    03:51:43 Рендерим статьи с помощью React Markdown
    03:54:10 Удаление статьи
    04:01:55 Редактирование статьи
    04:09:49 Что сказала кукуруза? (итого)
    04:10:25 Домашние задания для тебя
    04:13:02 Деплой блога на Heroku + Vercel
    04:14:24 Heroku
    04:17:56 Vercel
    04:23:45 Конец
    #nodejs #express #react #reactrouter #multer #markdown #deploy

КОМЕНТАРІ • 1 тис.

  • @yakub8798
    @yakub8798 2 роки тому +683

    Пж сделайте полный курс по node и experss, народ поддержите лайком !!!

    • @maxim.saharov
      @maxim.saharov Рік тому +15

      а зачем он тебе ? какая задача ? автор придумал идею и и сделал этот курс, что в ноде рассказывать ? как файлы перемещать) Предложи что идею что именно ты хочешь что бы сделал автор, что бы показал что именно на ноде?
      И тем более после этого курса ты сможеш я думаю и сам погуглить что нужно или документацию почитать и курс по ноде есть у Владилена Минина как вариант.

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

      @@maxim.saharov я имел ввиду что было бы хорошо если он сделал курс по node для джунов где он будет реализовать интернет магазин

    • @maxim.saharov
      @maxim.saharov Рік тому +12

      @@yakub8798 думаю такое он должен только платно вылаживать на юдеми, потому что это мега колоссальный труд!

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

      @@maxim.saharov да ты прав !

    • @yakub8798
      @yakub8798 Рік тому +5

      @@maxim.saharov но это может помочь с ростом аудитории так как по node таких курсов нет , в ру сегменте !

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

    Черт, как же ты хорошо объясняешь, столько инфы новой и все идеально понял, спасибо друг 🙌

  • @user-cb2bw2fx4j
    @user-cb2bw2fx4j Рік тому +1

    Спасибо за курс. Сначала с ужасом смотрел на домашнюю работу, но затем шаг за шагом и все получилось. Главное практика и обучение на собственных ошибках. Еще раз спасибо!! Ждем новых курсов!! Удачи!!

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

    Тебе огромное уважение и респект за твои труды💗 Продолжай в том же духе и повышай планку )

  • @unity_12
    @unity_12 2 роки тому +5

    Долго я искал такое видео! Спасибо за ваш труд! Классно 👍

  • @Goboz1
    @Goboz1 Рік тому +3

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

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

    Нет слов передать благодарности! Я делаю похожий проект но с firestore - вот теперь буду делать полный fullstack!

  • @batm1x
    @batm1x 2 роки тому +6

    Шикарный курс, большое спасибо )

  • @irohVlad
    @irohVlad Рік тому +13

    Это очень круто! То что нужно тем, кто посмотрел про теорию, но не знает как сделать что-то рабочее. Все очень понятно. Отдельное спасибо, что показал от начала и до деплоя, мало кто это делает, очень ценный курс.

  • @lexandrio
    @lexandrio 2 роки тому +5

    Такой контент и за бесплатно, спасибо большое, много полезного можно узнать) 🔥

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

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

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

    Огромная тебе уважуха за подобные проекты!!!👍

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

    Спасибо за контент!
    Как всегда топ 💪🏻

  • @user-qr7lr4cs1k
    @user-qr7lr4cs1k Рік тому +6

    Это лучший данного рода курс на ютубе, правда.
    Спасибо за Ваши труды! 🙂

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

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

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

    Вот это действительно новый уровень ! Спасибо

  • @user-qf4zx9qt6r
    @user-qf4zx9qt6r Рік тому +6

    Пожалуй самый лучший курс из всех по этой теме. Всё очень доступно. Нет к чему придраться. Большое спасибо. Буду следить за новыми выпусками.

  • @uzbelyorestate
    @uzbelyorestate Рік тому +11

    единственный канал который я нашел так четко и ясно объясняет автор ! спасибо за тяжёлый труд! я подписался сразу же 😎

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

    Большое спасибо! Подчеркнул для себя пару фишек!

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

    Спасибо за твой тяжкий труд!

  • @duce201
    @duce201 2 роки тому +27

    Спасибо большое за твой труд!!! Ты лучший!!! Офигенный курс и стэк!!!

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

    Это макимально крутое видео) Спасибо!

  • @user-ve8ux5yy7y
    @user-ve8ux5yy7y 9 місяців тому +1

    Огонь. Решил подучить бэкенд дополнением к фронту, чтобы можно было создавать полноценные сайты и твоё видео чётко в тему. Спасибо большое

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

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

  • @dw_tv3992
    @dw_tv3992 2 роки тому +28

    Спасибо за шикарный курс. У кого сервак не конектится к облаку монгодб и в терминале срабатывает кэтч - перейдите на страницу вашего облака и найдите слева кнопку Network Access > разрешите доступ по любому IP (если у вас динамический ) либо можете указать конкретный (если у вас статический) и в обоих случаях вы используете только браузерный впн

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

      все равно не помогает... везде встали нули, но не работает )))

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

      @@user-vc6mo5nl8g везде нули это и означает, что любой ip разрешен для подключения.
      проверьте строчку в серверном файле: mongoose.connect('.......') возможно у вас есть пароль, но в строке он не указан, либо его нет и в сроке это также некорректно отображено (в общем убедитесь что отсутствуют ошибки)

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

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

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

      Мне помогло изменение версии при коннекте с Node 4.1 or later на 2.2.12 or later

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

      Огромное спасибо. Помогло

  • @romaanasov
    @romaanasov 2 роки тому +91

    Чувствую что это будет мегаохренительный курс. Спасибо за всё!

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

      И твои чувства тебя не подводят 😎

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

      Брат, и мои тоже наверно

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

      как успехи

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

      Кто хочет научиться писать микросервисы nodejs, docker - заходим в гости!🤝

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

    Мега охренительное СПАСИБО!

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

    Огромное спасибо за все курсы, ваш вклад в отечественное IT БЕЗГРАНИЧЕН!

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

    Спасибо тебе за твои курсы!) Твой вклад в развитие русскоязычного айти сложно переоценить

  • @hermanherman7045
    @hermanherman7045 2 роки тому +32

    Ещё не закончил React Pizza 2.0, но заранее предвкушаю процесс прохождения данного курса, потому что знаю, что контент будет топовый - максимально понятный и информативный!
    Спасибо🙏
    #MongoDB #Express #React #NodeJS #MERN

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

    Спасибо за труд. Здоровья тебе и благополучия

  • @user-eb1cg9ln3u
    @user-eb1cg9ln3u 11 місяців тому +1

    Спасибо за обучение, очень помогает новичкам.

  • @denisunderonov
    @denisunderonov Місяць тому

    Всё очень понятно, спасибо, буду продолжать дальнейшее развитие в MERN

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

    Спасибо, пожалуй самый лучший курс из всех по этой теме.
    Единственное, что отталкивает то, что Вы систематически импорты вписываете вручную.

  • @jenek051
    @jenek051 2 роки тому +6

    Крутое видеоя спасибо, очень информативно 🤘 #mongoDB, #express, #nodeJS,#frontend, #backend,#react

  • @HelloWorld-bp1np
    @HelloWorld-bp1np Рік тому +113

    1:37:58 нормально ты автор, конечно, потролил. То-есть любой кто сделает get запрос может получить всю инфу из БД про всех авторов статей, включая email, хеши паролей, дату регистрации, короче тупо всю инфу. Понятно что курс для новичков, но это через чур. Как по твоему новичок найдет инфу как пофиксить это? Короче, немного посидев, нашел такое решение как передать туда только то что нужно (P.S. Не пойму почему так трудно было написать одну строчку автору) .populate({ path: "user", select: ["name", "avatar"] })

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

      Спасибо!
      Поднимите этот коммент в топ, хоть курс и для новичков, но это наоборот важно подчеркнуть!

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

      Вряд ли это троллинг. Авторы тоже могут ошибаться или не заметить ошибки

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

      почему то у меня тоже не работал Editable={userData?.id === obj.user._id}
      TypeError: Cannot read properties of null (reading '_id')

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

      ​@@serjmarkelov9915 я тоже сагласен

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

      А у меня почемуто не работал((

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

    Дэн ты нас балуешь)) Спасибо тебе большое!

  • @alex-kobrin
    @alex-kobrin 2 роки тому

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

  • @madeining
    @madeining Рік тому +24

    1:42:22 - вернулась ошибка при отправке, это ошибка возникла потому что, начиная с версии Mongoose 5.0, метод Model.findOneAndUpdate() больше не принимает колбэк в качестве последнего аргумента. Вместо этого, он возвращает объект типа Query или Promise.
    Чтобы исправить эту ошибку, вам нужно изменить код таким образом, чтобы он использовал либо async/await, либо .then() и .catch() для управления асинхронными операциями.
    Как выглядил:
    PostModel.findOneAndUpdate(
    {
    _id: postId
    },
    {
    $inc: { viewsCount: 1 },
    },
    {
    returnDocument: 'after'
    },
    (err, doc) => {
    if(err) {
    return res.status(500).json({
    message: "Не удалось вернуть статью"
    })
    }
    if(!doc) {
    return res.status(404).json({
    message: "Статья не найдена"
    })
    }
    res.json(doc)
    )
    Как должен выглядеть:
    PostModel.findOneAndUpdate(
    { _id: postId } ,{ $inc: { viewsCount: 1 } },{ returnDocument: "After" } )
    .then(doc => res.json(doc))
    .catch(err => res.status(500).json({ message: "Статья не найдена" }))

    • @_alex.barrel
      @_alex.barrel Рік тому +1

      спасибо, выручили!

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

      надо понизить версию mongoose на 6.10.0

    • @user-oo1wn9yl1t
      @user-oo1wn9yl1t 2 місяці тому

      спасибо

    • @user-qi6oe4fc4n
      @user-qi6oe4fc4n Місяць тому

      спасибо большое!!Добрый вы человек)) и очень многим думаю помогли

    • @dxdzdy2757
      @dxdzdy2757 Місяць тому

      Огромная благодарность!

  • @serjmarkelov9915
    @serjmarkelov9915 Рік тому +7

    Обычно избегаю оставлять комментарии, чтобы не отвлекаться от прогресса, но Денис, спасибо тебе огромное, что так подробно объясняешь.
    Я думаю, для многих из СНГ, IT - это хорошая возможность подняться и изменить жизнь к лучшему, так что, как говорится: you are doing God's work

  • @user-qb4sd7hf6y
    @user-qb4sd7hf6y 9 місяців тому

    Офигенно! Очень понятные обьянения. Спасибо!!!

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

    Автор, спасибо большое за твой труд!

  • @viacheslauabaimov3880
    @viacheslauabaimov3880 Рік тому +9

    TypeScript + Express было бы супер! Спасибо за работу

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

    То чувство, когда досмотрел 4-часовой курс и все проделывал вместе с автором. Спасибище огромное! 2 вопроса к тебе. Работал ли с php и правда ли хочешь бросить разработку? Частично слушал стрим, где ты на это намекаешь, но в то же время увидел план по трудоустройству в новую компанию в твоём блоге. Спасибо.

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

    как раз то, что нужно))
    огромное вам спасибо😊

  • @v.demchenko
    @v.demchenko Рік тому

    Красавчик. Проделано огромное количество работы.

  • @daruanikko
    @daruanikko Рік тому +3

    2:17:22 Гениальное объяснение

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

    Лучший, спасибо за туториал по подключению к базе данных

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

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

  • @polkovnik84
    @polkovnik84 8 місяців тому +9

    Если у кого-то была ошибка, при получении поста по ID, тогда вот исправления:
    let doc = await PostModel.findOneAndUpdate(
    { _id: postId },
    { $inc: { viewsCount: 1 } }
    );
    Потому как с версии mongodb v.5++ убрали возможность использовать callback функции в данном случае.

    • @umkament
      @umkament 8 місяців тому +4

      да, только я еще оставила третий параметр {returnDocument: 'after'}, иначе при первом получении документа счетчик просмотров так и будет оставаться нулевым, а нам нужно, чтобы он сразу в единичку превратился

    • @evans4068
      @evans4068 8 місяців тому

      красавчики, парни. Выручили@@umkament

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

    Автор, спасибо за видео !!! Круто !
    47:15 - если быть совсем точным, бкрипт - это алгоритм формирования пароля, а соль - это не алгоритм, это как и пароль обычная строка, набор символов (буквы, цифры, знаки), которые добавляются к паролю для того, чтоб хранящиеся в базе 10 одинаковых паролей не имели одинаковый хэш.

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

      Соль-в прямом смысле добавляет незначашие символы, подмешиваем соль.

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

      Но есть алгоритм добавляющий соль,

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

      @@maxburner8338 Да.

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

      А почему 47:50 при const salt = await bcrypt.genSalt(10) await-выдает ошибку

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

    Ты лучший!!! Спасибо большое за твой труд!!!

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

    Благодарю за курс!!!!! Контент просто супер!!!!

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

    по поводу cloud.mongodb - для тех у кого динамичный ip и/или сменяются подсети, то будет нежданчик ввиду ошибки подключения к базе данных, решается это дело в разделе Security -> Quickstart, нужно добавить текущий ip или всю подсеть

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

      Нету там Security > Quickstart. Я рот топтал эту mongodb, два дня шатал их базу данных и она всё падала с ошибкой. Четыре раза удалял и создавал новый проект и новую бд - ни фига. Поставил в разрешенных IP все нули и свой ипшник- хрена лысого, не работает. Ещё и под впн 100 раз капчу заставили заполнять со светофорами и велосипедами. А фишка в том, что там обязательно нужно поставить юзернейм и пароль. Причем пароль не абы какой, я поставил 12345. В их ошибке об этом ни слова . И только тогда это дерьмо заработало

    • @Aurum-Boss
      @Aurum-Boss Рік тому

      Добавить текущий ip адрес не получается

    • @Aurum-Boss
      @Aurum-Boss Рік тому

      Как добавить всю подсеть подскажите пожалуйста.

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

      @@Aurum-Bossк сожалению, ютуб удаляет ссылки со скриншотами, там есть инпут (IP Address), вставляешь в него свой ip адрес, правее от него, станет активной кнопка Add Entry, нажимаешь и ip добавится к текущему списку ip адресов

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

      @@Aurum-Boss с подсетью та же история, идентично как и с ip адресом, вставляешь весь диапазон и добавляешь

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

    Я очень долгое время пытался понять и начать писать код на raect, но всегда в голове была какая то каша из большого количества информации. Я полюбил твои курсы за то, что у тебя каждый курс сделан очень подробно, структурировано и понятно. С нетерпением жду новые курсы! Большое тебе спасибо за твой труд и удачи во всем!

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

      raect)

    • @user-or1hy4xz8u
      @user-or1hy4xz8u Рік тому +6

      @@nursbakytbek7599 у него ж каша в голове, сам сказал))))

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

      Как успехи

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

      @@user-th4qi8iv3q а как у тебя? :)

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

    Спасибо за ваш труд! (Полный Full Stack курс ReactJS + NodeJS)

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

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

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

    Думаю стоит уточнить, что есть довольно классная альтернатива Insomnia под названием Postman :)

    • @ihorsudenko864
      @ihorsudenko864 2 роки тому +14

      А есть еще лучше подход, относительно недавно я перешел с postman на thunder client это расширение для vscode, очень легковесное и имеет все необходимое!

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

      @@ihorsudenko864 Благодарю за инфу) Рил годная вещь)

    • @alex-kobrin
      @alex-kobrin 2 роки тому +5

      Я тоже взял альтернативу Insomnia , ecть отличный модуль в VS code как Thunder Client

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

      Мне как-то с insomnia удобнее)

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

      @@ihorsudenko864 сенкс, удобный экстеншн

  • @risel1241
    @risel1241 2 роки тому +10

    Курс бомба, единственное что, в описании нет исходника фронта без прикрученной логики, а только с версткой )

    • @ArchakovBlog
      @ArchakovBlog  2 роки тому +15

      пофиксил. теперь в master только вёрстка, в finished финальная версия

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

      @@ArchakovBlog Здравствуйте, где это можно найти?

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

    Предвкушаю, что будет что-то интересное)) лайк уже поставил!))

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

    то огонь как круто что ты такое сделал без вообще каких либо проблем backend пушка

  • @wilkinsan4315
    @wilkinsan4315 2 роки тому +11

    Привет! Я почти уже почти попал в iT (разработку), но блин жизненные планы не позволили сделать мечту. Именно твои уроки просты в восприятии и по ним я похоже буду учится чтобы всё таки сделать мечту реальностью.

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

      Че случилось?

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

      блин заебись мечта гонять гонять | и 0 по эфиру)) это не мечта, а так, средство к существованию((

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

    Дэнис, как всегда бомбический Full Stack курс получился! Спасибо тебе!!! #mongoDB, #express, #nodeJS, #frontend, #backend, #react

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

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

  • @andreybagulnikov5404
    @andreybagulnikov5404 2 роки тому +9

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

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

      1. валидации могут отличаться. Более простые проверки на фронте, посложнее - на сервере.
      2. защита от дурака. кто-то может захотеть прикрутить к твоему бэку фронт, в котором не сделает валидацию.
      3. сервер не должен зависеть от представления.

  • @alexmoney4641
    @alexmoney4641 Рік тому +7

    У кого возникла ошибка DB error MongooseServerSelectionError: Could not connect to any servers in your MongoDB Atlas cluster. One common reason is that you're trying to access the database from an IP that isn't whitelisted, Я смог решить проблему подключения к серверу на MongoDB, выполнив это изменение. Зашёл опять на сайт MongoDB и поменял настройки.
    Путь к настройкам: MongoDB Atlas -> NetworkAccess -> Edit -> Allowed Access from Anywhere

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

      Можно было просто свой ip локального компьютера, и ip облачного сервера добавить.

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

      Спасибо, помог с ошибкой

    • @maga_frank
      @maga_frank 11 місяців тому +1

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

    • @SenkeSem
      @SenkeSem 10 місяців тому

      Большое спасибо за помощь с решением. :)

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

      @@user-lm9nr4eo2f если свой указать то каждый день у меня он обновляется и каждый день надо указывать свой айди новый, я новичок поэтому этот курс у меня растянулся на пару дней

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

    Спасибо за видео
    Обязательно пересмотрю ещё

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

    Автору Огромный Респект! очень хороший курс ...

  • @sergiohardov
    @sergiohardov 7 місяців тому +6

    Автору спасибо за материал!)
    Для тех у кого ошибка на методе .findOneAndUpdate: "MongoDB удалила обратные вызовы из своего драйвера Node.js начиная с версии 5.0. findOne"
    по этому коллбек необходимо разбить на then для doc и catch для err
    PostModel.findOneAndUpdate(
    {
    _id: postId,
    },
    {
    $inc: { viewsCount: 1 },
    },
    {
    returnDocument: "after",
    }
    )
    .then((doc) => {
    if (!doc) {
    return res.status(404).json({
    message: "Article not found",
    });
    }
    res.json(doc);
    })
    .catch((err) => {
    if (err) {
    console.log(err);
    return res.status(500).json({
    message: "Error return article",
    });
    }
    });

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

    Есть в планах курс по next js?

  • @user-lm9nr4eo2f
    @user-lm9nr4eo2f Рік тому +3

    Если кому-то интересно, то потратив примерно пару часов, я узнал как эффективнее и быстрее всего убрать passwordHash. Как оказалось не надо итерироваться по массиву, или иных фиговых способов. Надо вторым аргументом в populate просто заминусовать это поле: .populate('user', '-passwordHash')

    • @user-ie7em2oi4m
      @user-ie7em2oi4m Рік тому +1

      Или туда же передать массив с нужными полями ['fullName', 'avatarUrl'] чтобы не плодить ненужные поля в ответе

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

      зачем убирать

    • @user-lm9nr4eo2f
      @user-lm9nr4eo2f 9 місяців тому

      Бро, уже не помню) @@Mike37373

    • @umkament
      @umkament 8 місяців тому +1

      отлично, спасибо

    • @Mike37373
      @Mike37373 8 місяців тому

      зачем убирать@@umkament

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

    Начинаю курс , let's go 🚀

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

    Огромное спасибо! Было очень интересно.

  • @user-ti6og5so1w
    @user-ti6og5so1w Рік тому +4

    Парень с именем Ян:
    - А как зарегистрироваться?

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

      придется стать Яной

  • @SenkeSem
    @SenkeSem 9 місяців тому +3

    Делал всё вместе с тобой. Правда это заняло часов 10 реального времени, а не 4, но всё шикарно получилось. Спасибо тебе большое, что делишься своим опытом с молодой гвардией пруграмистав. Удачи.

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

    По-моему самый внятный и полезный курс по node
    eact что я видел! Keep it up!

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

    Ден, объясни пожалуйста, что делает строка .populate('user').exec()
    Непонятен момент именно с exec

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

      Я практически не имел дело с технологиями из видоса и не смотрел сам видос, но, должно быть, речь идет о составлении запроса к базе данных. Если все так, то вызов .populate('user') - часть кода, который составляет запрос на стороне клиента (чтобы заполнить некоторую модель данных данными о пользователе), а вызов .exec() уже отправляет ранее составленный запрос к базе данных

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

      Насколько я понял, populate делает что-то на подобие join'a из SQL баз данных. То-есть, без этой функции в обьекте указан только _id пользователя, а с ней это ид превращается в обьект пользователя и информацию о нем, выбранную с помощью этого ид

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

      у меня возникла ошибки не работал populate()

    • @vlaszubenko2610
      @vlaszubenko2610 2 місяці тому

      @@ayhanak8913 Решил проблему, выведи errors в логи в catch и увидишь проблему, у меня была проблема в том, что я в PostSchema там где user писал модель User а у меня она названа UserModel (ref: 'UserModel',)

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

    Спасибо за труд, шел по твоим шагам в ролике, все получилось, не без трудностей конечно. Заливал уже на Render. Еще буду допиливать функционал из ДЗ.

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

    Как всегда топ, и как всегда все ИДЕАЛЬНО РАБОТАЕТ!!!👍

  • @pavelshnurov
    @pavelshnurov Рік тому +3

    Если у кого проблемы с получением статьи по id, надо понизить версию mongoose на 6.10.0

    • @N1K0_official
      @N1K0_official 11 місяців тому

      где это подробно можно узнать, как понизить версию ?

    • @user-bq6me2xn4x
      @user-bq6me2xn4x 11 місяців тому

      @@N1K0_official npm i mongoose 6.10.0

    • @user-oe1hf4lu3x
      @user-oe1hf4lu3x 11 місяців тому +3

      вместо колбека (err, doc) =>{}, нужно теперь чейнить
      PostModel.findOneAndUpdate({
      // что-то делаем
      }).then((doc, err) => {
      // Некоторая логика
      }).catch((reject) => {
      // Пример: res.status(404).json({
      msg: 'Статья не найдена!'
      })
      })
      Для тех кто столкнется с проблемой

  • @user-dx2zx5jt2s
    @user-dx2zx5jt2s Рік тому +3

    Спасибо автор за очень полезное видео!
    Подскажи пожалуйста что означает это предупрждение и что с ним делать: "
    (node:5760) [MONGOOSE] DeprecationWarning: Mongoose: the `strictQuery` option will be switched back to `false` by default in Mongoose 7. Use `mongoose.set('strictQuery', false);` if you want to prepare for this change. Or use `mongoose.set('strictQuery', true);` to suppress this warning.(Use `node --trace-deprecation ...` to show where the warning was created)
    "

    • @MidNight-ef4kg
      @MidNight-ef4kg Рік тому

      Тоже не знаю, но вроде и с этим все работает, если кто знает, помогите плиз

    • @user-em5gh4bz4x
      @user-em5gh4bz4x Рік тому +1

      @@MidNight-ef4kg mongoose.set('strictQuery', false); вот это добавь перед первым использование . в чем прикол не понял

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

      @@user-em5gh4bz4x мне тоже такое решение помогло.

  • @ai-bloggers
    @ai-bloggers 2 роки тому

    Вот это я удачно зашёл. Спасибо огромное

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

    Спасибо Арчаковский, это был мегаохренительный контент

  • @satyxa
    @satyxa Рік тому +3

    57:15 не объяснил почему _doc стало и ещё пару моментов для понимания не раскрыто, а так видос ахуенный

    • @iliyachepkin
      @iliyachepkin Рік тому +3

      Когда он возвращал только "...user", вернулся объект с большим количеством свойств внутри него. Если ты посмотришь на содержимое этого объекта ты увидишь что один из свойств это еще один объект под названием "_doc".
      Написав "...user._doc" он указал путь к свойству _doc (который является тоже объектом) внутри "...user"

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

      @@iliyachepkin ♥

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

    отличный курс. Но после деплоя на хероку и переходу по ссылке с запросом posts ошибка: Application error. Диплой на vercel естественно так же с ошибкой, не прогружает посты и постоянно выдает при запросе в нетворке: CORS error. Кто-то сталкивался с таким, пытаюсь сам вылечить , пока без результатно.

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

      Та же проблема, если найдёте решение сообщите!

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

      Решил проблему, автор не уточнил, что нужно добавить в .gitignore node modules, при деплое на хероку они ломают все, не благодари

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

      @@merunus8556 спасибо, полностью заново перезаливал бекэнд на гитхаб а потом на хероку?

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

      все отлично завелось. странно что при git init не создался по умолчанию файл с .gitignore

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

      странно. git ignore залил в репозиторий и вроде бы на Heroku уже всё почистил и заново запустил. Но что-то всё-таки нет так...

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

    Спасибо большое за твой труд!!!!

  • @user-lk4kv5sw7s
    @user-lk4kv5sw7s 3 місяці тому

    Спасибо большое за прекрасный курс!!! Осталось реализовать дополнительный функционал из домашнего задания

  • @mex5341
    @mex5341 Рік тому +6

    начиная с фронтенда курс испортился . Почему нельзя было сделать все по порядку с версткой , созданием компонентов и т.д ? Вышло бы длиннее, но понятнее

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

      согласен, для новичков понятнее, когда с нуля набираешь. А так на фронте полная хрень началась

    • @aleksprimetv
      @aleksprimetv Рік тому +2

      если ты новичок, то тебе рано вообще на фулстак зарится закатай губу и иди учи основы.

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

      @@aleksprimetv лол)

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

      @@aleksprimetv согласен

  • @nagibbator4449
    @nagibbator4449 Рік тому +3

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

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

      я просто свой текущий IP добавляю в network access

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

      @@fatale2ror55 у меня перестает работать, приходится заново все делать

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

      @@nagibbator4449 это если айпи поменялся или в процессе отключается?

  • @AlBert-ks4xq
    @AlBert-ks4xq Рік тому

    РЕСПЕКТ автору! Доступно и понятно

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

    Новая годнота подьехала!!!

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

    Спасибо огромное за труды, все очень понятно и доходчиво

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

    Wow!! Спасибо огромное!! 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥

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

    Подача - моё почтение! Лучший в РУ-сегменте. Перешёл сюда сразу после реакт-пиццы

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

    Как всегда - на высоте!

  • @damirospanbek4339
    @damirospanbek4339 5 місяців тому

    Респект таким людям которые вкладывают душу в свои видео

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

    Великолепно, спасибо большой за твой труд

  • @ProstoZurab
    @ProstoZurab Рік тому +18

    у кого ошибка на моменте с getonebyid(no longer support callback) используйте async/await
    вот пример
    const doc = await PostModel.findByIdAndUpdate(
    { _id: postId }, { $inc: { viewsCount: 1 } }, { returnDocument: 'after' },
    )

    if (!doc) {
    return res.status(404).json({
    message: 'не удалось найти статью'
    })

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

      да, на stack overflow тоже так советут, спасибо, бро

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

      ya prosta skachat versiyu mongoose@6,10,0

    • @sexy_cat_1
      @sexy_cat_1 11 місяців тому +5

      можно еще промисом:
      PostModel.findOneAndUpdate(
      {
      _id: postId,
      },
      {
      $inc: { viewsCount: 1 },
      },
      {
      returnDocument: "after",
      }
      ).then((doc, err) => {
      if (err) {
      console.log(err);
      return res.status(500).json({
      message: "Can't get article.",
      });
      }
      if (!doc) {
      return res.status(404).json({
      message: "Article not found.",
      });
      }
      res.json(doc);
      });

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

      тоже так пытался но не выходит 500 ошибку получить, поэтому ее обернул в .catch после .then

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

    Ваах...охрененный курс))))

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

    Огромное спасибо за курс!