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

2024 ж. 10 Мам.
369 777 Рет қаралды

В этом видео ты научишься с нуля разрабатывать бэкенд на стэке 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: vk.com/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

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

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

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

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

      @maxim.saharov@maxim.saharov Жыл бұрын
    • @@maxim.saharov да ты прав !

      @yakub8798@yakub8798 Жыл бұрын
    • @@maxim.saharov но это может помочь с ростом аудитории так как по node таких курсов нет , в ру сегменте !

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

    @HelloWorld-bp1np@HelloWorld-bp1np Жыл бұрын
    • Спасибо! Поднимите этот коммент в топ, хоть курс и для новичков, но это наоборот важно подчеркнуть!

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

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

      @ayhanak8913@ayhanak891310 ай бұрын
    • ​@@serjmarkelov9915 я тоже сагласен

      @ayhanak8913@ayhanak891310 ай бұрын
    • А у меня почемуто не работал((

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

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

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

    @unity_12@unity_12 Жыл бұрын
  • Шикарный курс, большое спасибо )

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

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

    @user-cb2bw2fx4j@user-cb2bw2fx4j Жыл бұрын
  • Спасибо за контент! Как всегда топ 💪🏻

    @vladimirvalko1108@vladimirvalko1108 Жыл бұрын
  • Такой контент и за бесплатно, спасибо большое, много полезного можно узнать) 🔥

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

    @antonvasyukov763@antonvasyukov763 Жыл бұрын
  • 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: "Статья не найдена" }))

    @madeining@madeining11 ай бұрын
    • спасибо, выручили!

      @_alex.barrel@_alex.barrel10 ай бұрын
    • надо понизить версию mongoose на 6.10.0

      @AmericanDragon134@AmericanDragon13410 ай бұрын
    • спасибо

      @user-oo1wn9yl1t@user-oo1wn9yl1tАй бұрын
    • спасибо большое!!Добрый вы человек)) и очень многим думаю помогли

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

    @irohVlad@irohVlad Жыл бұрын
  • очень приятно и легко смотрятся ваши видео, спасибо

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

    @user-cd1cv4lm7s@user-cd1cv4lm7s Жыл бұрын
  • Снова вернулся на твой канал , мне предстаит много наверстать, Спасибо за твою работу !

    @alex-kobrin@alex-kobrin Жыл бұрын
  • единственный канал который я нашел так четко и ясно объясняет автор ! спасибо за тяжёлый труд! я подписался сразу же 😎

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

    @user-qr7lr4cs1k@user-qr7lr4cs1k Жыл бұрын
  • как раз то, что нужно)) огромное вам спасибо😊

    @danorkalled1618@danorkalled1618 Жыл бұрын
  • Дэн ты нас балуешь)) Спасибо тебе большое!

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

    @dw_tv3992@dw_tv3992 Жыл бұрын
    • все равно не помогает... везде встали нули, но не работает )))

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

      @dw_tv3992@dw_tv3992 Жыл бұрын
    • спасибо, помогло)

      @olegger7436@olegger7436 Жыл бұрын
    • Мне помогло изменение версии при коннекте с Node 4.1 or later на 2.2.12 or later

      @BLVCK7@BLVCK7 Жыл бұрын
    • Огромное спасибо. Помогло

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

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

    @jscripts2697@jscripts2697 Жыл бұрын
  • Большое спасибо! Подчеркнул для себя пару фишек!

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

    @user-xj8nv1lr1x@user-xj8nv1lr1x Жыл бұрын
  • Это макимально крутое видео) Спасибо!

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

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

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

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

    @jamalisrapilov@jamalisrapilov Жыл бұрын
    • И твои чувства тебя не подводят 😎

      @darkside2436@darkside2436 Жыл бұрын
    • Брат, и мои тоже наверно

      @xeedreen2120@xeedreen2120 Жыл бұрын
    • как успехи

      @user-th4qi8iv3q@user-th4qi8iv3q Жыл бұрын
    • Кто хочет научиться писать микросервисы nodejs, docker - заходим в гости!🤝

      @alexandrkruglyak@alexandrkruglyak Жыл бұрын
  • Огромная тебе уважуха за подобные проекты!!!👍

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

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

    @hermanherman7045@hermanherman7045 Жыл бұрын
    • закончил ?

      @AmericanDragon134@AmericanDragon134 Жыл бұрын
    • ?

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

    @user-kn3ut1sh2o@user-kn3ut1sh2o Жыл бұрын
  • Спасибо за Ваш труд! Очень полезный курс!

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

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

    @alekseyberezov8020@alekseyberezov8020 Жыл бұрын
  • Мега охренительное СПАСИБО!

    @user-jg5wo9zm6q@user-jg5wo9zm6q Жыл бұрын
  • Крутое видеоя спасибо, очень информативно 🤘 #mongoDB, #express, #nodeJS,#frontend, #backend,#react

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

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

      @umkament@umkament7 ай бұрын
    • красавчики, парни. Выручили@@umkament

      @evans4068@evans40687 ай бұрын
  • Автор, спасибо большое за твой труд!

    @ilyaprotsenko1023@ilyaprotsenko1023 Жыл бұрын
  • Спасибо за твой тяжкий труд!

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

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

      @user-gk6xq8wk3w@user-gk6xq8wk3w Жыл бұрын
    • Добавить текущий ip адрес не получается

      @Aurum-Boss@Aurum-Boss Жыл бұрын
    • Как добавить всю подсеть подскажите пожалуйста.

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

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

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

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

    @aeron_rus@aeron_rus Жыл бұрын
  • реально крутой ролик получился, видно что заморочился, респект

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

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

      @woodlandfantomas2044@woodlandfantomas2044 Жыл бұрын
    • Но есть алгоритм добавляющий соль,

      @maxburner8338@maxburner8338 Жыл бұрын
    • @@maxburner8338 Да.

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

      @diokgg@diokgg Жыл бұрын
  • TypeScript + Express было бы супер! Спасибо за работу

    @viacheslauabaimov3880@viacheslauabaimov3880 Жыл бұрын
  • Спасибо за труд. Здоровья тебе и благополучия

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

    @Ironman1703@Ironman1703 Жыл бұрын
  • Думаю стоит уточнить, что есть довольно классная альтернатива Insomnia под названием Postman :)

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

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

      @user-co5pk5uv5w@user-co5pk5uv5w Жыл бұрын
    • Я тоже взял альтернативу Insomnia , ecть отличный модуль в VS code как Thunder Client

      @alex-kobrin@alex-kobrin Жыл бұрын
    • Мне как-то с insomnia удобнее)

      @itmodern2386@itmodern2386 Жыл бұрын
    • @@ihorsudenko864 сенкс, удобный экстеншн

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

    @user-yf3mq3lk7p@user-yf3mq3lk7p Жыл бұрын
    • raect)

      @nursbakytbek7599@nursbakytbek7599 Жыл бұрын
    • @@nursbakytbek7599 у него ж каша в голове, сам сказал))))

      @user-or1hy4xz8u@user-or1hy4xz8u Жыл бұрын
    • Как успехи

      @user-th4qi8iv3q@user-th4qi8iv3q10 ай бұрын
    • @@user-th4qi8iv3q а как у тебя? :)

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

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

    @aleksandrbarabash2221@aleksandrbarabash2221 Жыл бұрын
  • Есть в планах курс по next js?

    @daniil7243@daniil7243 Жыл бұрын
  • 2:17:22 Гениальное объяснение

    @daruanikko@daruanikko11 ай бұрын
  • Красавчик. Проделано огромное количество работы.

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

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

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

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

    @1terbik1@1terbik1 Жыл бұрын
  • Спасибо за видео Обязательно пересмотрю ещё

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

    @wilkinsan4315@wilkinsan4315 Жыл бұрын
    • Че случилось?

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

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

    @risel1241@risel1241 Жыл бұрын
    • пофиксил. теперь в master только вёрстка, в finished финальная версия

      @ArchakovBlog@ArchakovBlog Жыл бұрын
    • @@ArchakovBlog Здравствуйте, где это можно найти?

      @almira4833@almira4833 Жыл бұрын
  • Начинаю курс , let's go 🚀

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

    @vladimiralexeev2829@vladimiralexeev2829 Жыл бұрын
  • Автору спасибо за материал!) Для тех у кого ошибка на методе .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", }); } });

    @sergiohardov@sergiohardov5 ай бұрын
    • Спасибо тебе

      @nicholasdev1853@nicholasdev18532 ай бұрын
    • @kapitankrolick@kapitankrolick2 ай бұрын
  • У кого возникла ошибка 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

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

      @user-lm9nr4eo2f@user-lm9nr4eo2f Жыл бұрын
    • Спасибо, помог с ошибкой

      @fsvasi@fsvasi11 ай бұрын
    • спасибо помог

      @maga_frank@maga_frank9 ай бұрын
    • Большое спасибо за помощь с решением. :)

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

      @sernowodsk5963@sernowodsk59632 ай бұрын
  • Благодарю за курс!!!!! Контент просто супер!!!!

    @chertiav@chertiav Жыл бұрын
  • Спасибо за обучение, очень помогает новичкам.

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

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

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

      @loreeltv@loreeltv Жыл бұрын
    • у меня возникла ошибки не работал populate()

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

      @vlaszubenko2610@vlaszubenko261028 күн бұрын
  • Спасибо автор за очень полезное видео! Подскажи пожалуйста что означает это предупрждение и что с ним делать: " (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) "

    @user-dx2zx5jt2s@user-dx2zx5jt2s Жыл бұрын
    • Тоже не знаю, но вроде и с этим все работает, если кто знает, помогите плиз

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

      @user-em5gh4bz4x@user-em5gh4bz4x Жыл бұрын
    • @@user-em5gh4bz4x мне тоже такое решение помогло.

      @katerina6259@katerina6259 Жыл бұрын
  • Огромное спасибо за курс!

    @DamirTD@DamirTD Жыл бұрын
  • Как всегда - на высоте!

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

    @user-lm9nr4eo2f@user-lm9nr4eo2f Жыл бұрын
    • Или туда же передать массив с нужными полями ['fullName', 'avatarUrl'] чтобы не плодить ненужные поля в ответе

      @user-ie7em2oi4m@user-ie7em2oi4m Жыл бұрын
    • зачем убирать

      @Mike37373@Mike373738 ай бұрын
    • Бро, уже не помню) @@Mike37373

      @user-lm9nr4eo2f@user-lm9nr4eo2f8 ай бұрын
    • отлично, спасибо

      @umkament@umkament7 ай бұрын
    • зачем убирать@@umkament

      @Mike37373@Mike373737 ай бұрын
  • Спасибо за курс!

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

    @sidby966@sidby966 Жыл бұрын
    • Та же проблема, если найдёте решение сообщите!

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

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

      @sidby966@sidby966 Жыл бұрын
    • все отлично завелось. странно что при git init не создался по умолчанию файл с .gitignore

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

      @yuramarinenkov8697@yuramarinenkov8697 Жыл бұрын
  • Спасибо большое за твой труд!!!!

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

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

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

      @iliyachepkin@iliyachepkin Жыл бұрын
    • @@iliyachepkin ♥

      @satyxa@satyxa Жыл бұрын
  • Парень с именем Ян: - А как зарегистрироваться?

    @user-ti6og5so1w@user-ti6og5so1w Жыл бұрын
    • придется стать Яной

      @excelente9842@excelente9842 Жыл бұрын
  • Ты лучший!!! Спасибо большое за твой труд!!!

    @arturfrimu4161@arturfrimu4161 Жыл бұрын
  • Офигенно! Очень понятные обьянения. Спасибо!!!

    @user-qb4sd7hf6y@user-qb4sd7hf6y8 ай бұрын
  • Если у кого проблемы с получением статьи по id, надо понизить версию mongoose на 6.10.0

    @pavelshnurov@pavelshnurov10 ай бұрын
    • где это подробно можно узнать, как понизить версию ?

      @N1K0_official@N1K0_official10 ай бұрын
    • @@N1K0_official npm i mongoose 6.10.0

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

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

    @nagibbator4449@nagibbator4449 Жыл бұрын
    • я просто свой текущий IP добавляю в network access

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

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

      @fatale2ror55@fatale2ror55 Жыл бұрын
  • Новая годнота подьехала!!!

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

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

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

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

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

      @aleksprimetv@aleksprimetv Жыл бұрын
    • @@aleksprimetv лол)

      @mex5341@mex5341 Жыл бұрын
    • @@aleksprimetv согласен

      @yuramarinenkov8697@yuramarinenkov8697 Жыл бұрын
  • Спасибо огромное за труды, все очень понятно и доходчиво

    @uniquelollipop4722@uniquelollipop4722 Жыл бұрын
  • Как всегда топ, и как всегда все ИДЕАЛЬНО РАБОТАЕТ!!!👍

    @davinchi1804@davinchi1804 Жыл бұрын
  • Wow!! Спасибо огромное!! 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥

    @3dzbot@3dzbot Жыл бұрын
  • Хороший курс! Спасибо!

    @yma813@yma813 Жыл бұрын
  • Благодарю!! Очень полезно!

    @user-qw9uo4wo5p@user-qw9uo4wo5p Жыл бұрын
  • Автору Огромный Респект! очень хороший курс ...

    @user-ex1ks2xk5m@user-ex1ks2xk5m Жыл бұрын
  • То что я искал) надо будет повторить после завода - спасибо)

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

    @valerygusso1053@valerygusso1053 Жыл бұрын
  • РЕСПЕКТ автору! Доступно и понятно

    @AlBert-ks4xq@AlBert-ks4xq Жыл бұрын
  • Спасибо большое за такой труд! лайк!

    @goodvinsk8@goodvinsk8 Жыл бұрын
  • Спасибо за курс, лучший!

    @user-ov3qu1kw7z@user-ov3qu1kw7z Жыл бұрын
  • как всегда красавчик, спасибо!

    @jenk7019@jenk7019 Жыл бұрын
KZhead