Тимур ты молодец! Никто не снимает такие уроки для бесплатных просмотров. Я очень рад что у нас есть такие люди, которые не просто готовы делиться своими знаниями но и преподносить это очень грамотно, четко и ясно. Я надеюсь что твой труд не напрасный, и что тебе воздастся это в тысячу и более раз. Желаю тебе удачи в жизни, а твоему творчеству и каналу процветания. Ну и конечно же здоровья
it-kamasutra прекрасные бесплатные плейлисты по части фронта и бэка. Так что не никто) Димыч очень дотошно разжевывает - так что дойдет даже гуманитарию =)
Кто смотрит в 2023 и у кого не робит POST и PUT в постмане - зайдите в Headers и в key поставте "Content-Type" а в value "application/json". Спасибо за видео, лайк!
Можно ли начинать изучение программирования, в частности backend, с JavaScript+Node.js? Или лучше заходить туда через фронтенд? Если можно, с чего лучше начинать? Пишут, что фронтенд проще для начала. Я поизучал вёрстку, попробовал делать. Но понял, что не мое. Больше хочу делать содержание, а не внешку на клиентской части. Буду благодарен за совет
Так пишут, ибо nodejs вытекает из обычного js, а его ты обычно используешь когда пишешь фронт. Больше практикуешься, понимаешь как работает клиентская часть, и уже потом ты на этой базе лезешь в бэк, чтобы понять как работают запросы для сервера, их обработка и тд. Ты попробовал верстку, но там и намека нет на код, т.е на js даже например. HTML/CSS -> JS -> Фреймворк(React, Vue, Angular) -> NodeJs и бэк. Это если путь который фронт проходит.
Человеки, если у кого то при подключении к бд, возникает ошибка -"codeName: 'AtlasError'", возможно вам поможет добавление нового ip с предоставлением доступа любому пользователю.
Для поддержки канала)) Давай серию уроков про jest, тестировать можно одно из тех приложений что ты делал в предыдущих видео. Думаю многим будет актуально.
Как беспощадно время) в 2022 по ходу урока пришлось доустановить: express-form-data для парсинга тела запроса из form-data в fileService пришлось пользовать fs.rename т.к. file.mv сказал что он не функция=) с локальной монгой (т.к. облачная без впна теперь всё) тоже оказалось интересно, для подключения нужно создавать пользователя с правами на readWrite иначе не коннектилось (без указания юзера). Пока что в начале пути, материал шикарен (структурирован, понятен). Классные уроки 👍 лайк, подписка и отдельный плейлист из ваших видео!)
предлагаю сделать видео для абсолютных "0". То бишь, например, с объяснений что такое json, в каких случаях нужен бэкенд. Например, для лендинга бэк не нужен, а для интернет-магазинов нужен. А зачем ecommerce нужен бэк? Чтобы как-то работать с бд? А зачем нужна бд? Чтобы, например, хранить auth данные о пользователях. А как, например, связать фронт и бэк между собой? Например, при пагинации, если у меня 500 html-страниц, то не буду ж я их вручную создавать. Соответственно, страницы должны подтягиваться с бэка или во фронте это можно сделать проще? Хер знает.
По поводу "как связать бэк и фронт между собой" и как сделать роутер, если у каждой страницы товаров url будет уникальным согласен. Думаю многие бы были благодарны освещению этих тем
я начинающий. По этому видео ничего не понятно. Может нужно не просто зачитать определения, а описать явление с разных сторон, рассусолить. Как уроки it-kamasutra например по js, реакту
Ничего не понятно но интересно, уже второй раз смотрю и ничего не понимаю. Но, во второй раз понимаю уже чуть больше. Посмотрю в трейтий раз уже с написанием кода тогда думаю все встанет на свои места.
Тимур, ты мой кумир. И вопрос. Если мы сталкиваемся с непонятной ошибкой, пробуем решить своими силами, но не получается, то как искать решение? Как правило я копирую ошибку и гуглю ее. Приходится перелопатить много нерелевантной информации, прежде чем доберусь до нужного. Вот например: отправляю POST raw json запрос через Postman. Запрос успешно срабатывает. Но как только отправляю тот же самый запрос через form-data, получаю ошибку "name": "ValidationError", "message":"Post validation failed: content: Path `content` is required, title: Path `title` is required., author: Path `author` is required." Все поля текстовые.
@@chikenmacnugget за счет типов которые помогут тайпскрипту ругаться на дева который решил например вызвать свойство которого не существует(js скажет "красавчик")
Всем примет, подскажите, как называется расширение, что б высвечивалось содержание объектов в маленьких окошечках в коде, как у автора? Типа req :Request?
🎯 Key points for quick navigation: 00:03 *🖥️ Введение в backend разработку и REST API* - Курс предназначен для начинающих программистов и frontend разработчиков - Рассмотрение основных теоретических моментов и практическое закрепление знаний - Использование Node.js для разработки backend 01:10 *🔄 Клиент-серверное взаимодействие и основы HTTP* - Обзор клиент-серверного взаимодействия - Основы HTTP протокола и типы запросов (GET, POST, PUT, DELETE) - Структура HTTP запроса: заголовки, тело запроса и статус-коды ответов 04:24 *🌐 REST API и CRUD операции* - Понятие REST API и его преимущества - Пример HTTP запроса и обработки на сервере - CRUD операции: создание, чтение, обновление и удаление данных 06:29 *🛠️ Настройка проекта и первый сервер на Express* - Установка Node.js и Postman - Инициализация проекта и установка зависимостей - Создание простого сервера на Express и обработка GET запроса 10:10 *🔧 Работа с запросами и параметрами* - Использование nodemon для автоматической перезагрузки сервера - Обработка query параметров в GET запросе - Работа с телом запроса в POST запросе 12:53 *💾 Подключение базы данных MongoDB* - Выбор и подключение базы данных к серверу - Создание проекта в MongoDB Atlas - Настройка кластера базы данных 13:48 *🗄️ Подключение к базе данных MongoDB* - Создание пользователя и получение URL для подключения - Установка и импорт библиотеки Mongoose - Настройка подключения к базе данных с обработкой ошибок 16:47 *📝 Создание модели данных для постов* - Описание схемы поста с полями: автор, заголовок, контент, изображение - Создание и экспорт модели на основе схемы - Пример создания и сохранения поста в базе данных 19:32 *🚀 Улучшение обработки запросов и ошибок* - Возврат созданного поста клиенту - Обработка ошибок при создании поста - Реализация блока try-catch для предотвращения падения сервера 21:21 *🛣️ Создание и настройка роутера* - Создание отдельного файла для роутера - Описание маршрутов для операций CRUD с постами - Регистрация роутера в основном приложении 23:56 *🎮 Создание контроллера для постов* - Выделение логики обработки запросов в отдельный контроллер - Реализация функций для каждого маршрута (create, getAll, getOne, update, delete) - Подключение функций контроллера к соответствующим маршрутам 25:59 *💾 Реализация логики CRUD операций* - Получение всех постов из базы данных - Получение конкретного поста по ID - Обработка ошибок и валидация входных данных 27:50 *🔍 Реализация функции получения поста по ID* - Копирование ID существующего поста - Отправка GET-запроса с ID в строке запроса - Получение конкретного поста по ID 30:24 *🔄 Реализация CRUD операций* - Создание endpoint'ов для создания, получения, обновления и удаления объектов - Тестирование всех операций с помощью Postman - Обработка ошибок при отсутствии ID 31:33 *🏗️ Введение в слои абстракции* - Разделение логических частей приложения на отдельные модули - Описание слоев: DAL (доступ к данным), контроллер, сервис - Преимущества использования слоев абстракции 33:24 *🛠️ Реализация сервисного слоя* - Создание файла post.service.js - Перенос логики из контроллера в сервис - Адаптация функций для работы без request и response 37:49 *📁 Работа с файлами и изображениями* - Установка модуля express-fileupload - Добавление обработки файлов в контроллер - Создание отдельного сервиса для работы с файлами 42:35 *📁 Реализация функции сохранения файла* - Создание функции для перемещения файла по указанному пути - Обработка ошибок с использованием блока try-catch - Импорт и использование файлового сервиса в post-сервисе 43:33 *🔄 Обновление объекта поста с добавлением информации о файле* - Добавление поля picture к объекту поста - Отправка запроса и устранение ошибки асинхронности - Проверка сохранения файла в папке static 44:14 *🖼️ Настройка сервера для отдачи статических файлов* - Использование функции express.static для обработки статических файлов - Демонстрация доступа к сохраненному изображению через браузер - Объяснение, как использовать полученный URL изображения в HTML-теге img Made with HARPA AI
Сейчас MongoDB не работает из России. Приходится через VPN, видимо из-за этого "MongoServerError: bad auth : Authentication failed." Ещё "npm i -D nodemon" не работает, всеравно не появляется динамичного лога. Из-за этого и постман не видит сервер походу...
form-data не работает, пишет validation error типа поля обязательные а я их не указываю, это на моменте когда файл нужно загружать но через raw успех, ищу решение, внятного нету нигде
Я раз 5 пытался про ноду видосы смотреть и вообще не вдуплял че происходит, хотя реакт нормально заходил и вообще думал, что js более-менее знаю. Вернулся спустя какое-то время и на удивление что-то начал понимать
народ кто подскажет по поводу jpg? на локалхосте все работает норм, на хероку, объект сохраняется с полем пикчер, но сама пикча видимо не сохраняется по тому что по запросу выдается 404 . кто знает че делать?)
Проверка наличие id, если мы его принимаем в query.params нормально не отрабатывает. Даже если никакой id не передаешь. Пробовал на length проверять - тоже не выводит ошибку.
Прикольный на самом деле урок. Помню как я маялся создавал бэк с постгрессом, потом прикручивал туда nginx, pm2 вроде, и самое забавное - основная цель была авторизация. И чёт как-то посложнее это всё было в реализации, jwt опять же пришлось юзать. При том что я полный ноль в бэке, т.к. фронт/джун. Автор, сделай доброе дело, запили доп урок с авторизацией, с использованием jwt и oauth2. Насколько я понял, оно сейчас почти на всех проектах так.
Да для фронта, еще если и с беком опыта нет, то вообще муть конечно) Про авторизацию есть урок на канале, возможно сниму более продвинутую версию попозже
@@UlbiTV я как-то жахнул статику с прода... вот за счет хеша, я просто заново отправил все картинки через сервис на бэкэнде, он сам поменял имена под хеш и все выровнялось, бд править не пришлось
Высший класс!!! Это лучшее видео, которое Вы сделали!!! Респект!!! В этом видео нет ничего лишнего, и в тоже самое время есть всё необходимое. Вообще для начинающих бэкэндеров хочу пояснить - бэкэнд это две вещи: базы данных и написание эндпойнт методов, всё остальное - бюрократические процедуры
Особое спасибо за инфу, как использовать import вместо require, не знал, как правильно делать, а с ним код понятней:))) ну и слои абстракции были очень полезны, в остальном, закрепил знания, надеюсь🤣🤣🤣
Очень полезное видео, только хотелось бы увидеть его продолжение например на реакте где будет уже +- показана отрисовка данных с бд и првязка этих всех запросов к конкретным кнопкам. Я +- понимаю что нужно делать пост запрос скорее всего, через мап отрисовывать все, считывать ид при удалении, но хотелось бы увидеть и понять это от вас. Спасибо.
Схожие задачи Тимур объясняет в курсе про mern диск, там и бэк и фронт, если не хотите ждать, можно ознакомиться там(конечно, если ещё этого не сделали:))) к слову, в том курсе достаточно подробно описано, как работать с запросами( react + axios)
Спасибо за крутой контент!!! Канал - огонь!!! Вообщем, после этого урока запустил я впервые сервер на express и залил в mongoDB 16 пользователей - все у меня вывелись на фронте. Всё бы хорошо, но мне необходимо сделать постраничный вывод(пагинацию) по 4 пользователя на странице. Пролазил я 3 дня по форумам и видео с REST API, но так и не нашёл где в node следует вводить значения get-параметров(query string). Пробовал в postman создать 4 post-запроса по 4 пользователя с помощью params, вводя в key значение page , а в value номер необходимой страницы. В итоге в браузере ввожу «localhost:8888/api/users?page=2» и мне вместо пользователя 5, 6, 7 и 8 выводятся все 16. Подскажите, пожалуйста как в nodejs для endpoint устанавливать значение get-запросов, с помощью чего это делается и где именно, в каком файле? Развития каналу, спасибо за ваш труд!!!
Есть у кого-нибудь мысли, как пофиксить форм-дату? Пробовал боди парсером и экспресс формдатой, не помогло, все так же не видит запросы с форм датой, но при этом raw работает корректно. upd. попробовал взять зависимости из package.json автора, все заработало, видимо, с более высокой версией экспресса не работает.
А сервера гугла, яндекса и т.д - это какие-то здоровенный железяки где-то расположенные? А если их, допустим повредили, ну там самолет упал или типа того)) Что будет?
27:29 думаю нет смысла проверять есть id или нет, если get-запрос перешёл в '/posts', то всё что идет дальше (после '/posts/') будет считаться ид-шником. А в put и delete имеет смысл.
В delete вроде тоже смысла нет, даже если есть проверка, сообщение "id не указан" все равно не приходит. Приходит ошибка, что нет роутера DELETE posts/
И еще при проверке id в put, нужно писать return res... так как если код на этом не остановится, далее сервер будет падать. Если id не указать в запросе конечно. Правда в видео вроде не упал и у меня тоже со второго раза начал падать, хз почему. Насколько я понимаю js, при любом респонсе нужно писать return
@@ivandanilin5690 У меня тоже упал. И я тоже видео в этом месте пересмотрел несколько раз. Автор этот момент тупо пропустил. Короче, я тоже сам догадался перед res написать return. Потом полез в комменты искать заметил ли кто-то кроме меня эту ошибку. Оказалось, я не один такой молодец)
Чего-то у меня, как обычно, все через одно место. Вот что не так? :( Делаю в Вижл студио код, ну собственно код в index.js import express from 'express' const PORT = 5000; const app = express() app.listen(PORT, callback: () => console.log('server' + PORT)) в 4й строке callback: двоеточие подчеркивает как ошибку, и код не работает
@@UlbiTV ахвононочто))) Блин, спасибо, а то я весь гугль перерыл, что это такое, как оно работает и что вообще. А это оказывается подсказка от проги >_< А так урок вроде доступный (если не считать моего затупка), спасибо, с меня плюсик и подписка :)
Привет, Тимур а скажи каким образом ты используешь import/export в среде Node.js ?? вроде бы IDE ругается если не использовать require, или это плагин какой то?
Есть. На моменте когда он убирает id из PUT, у него возвращается "id не найден" и все работает дальше. У меня при таком же самом коде и таком же действии возвращается в постмене то же самое, но сервер крашиться потому что "один код ошибки (400) уже отправлен (как раз наш "id не найден"), а код 500 нельзя отправить". Все же вопрос, почему у меня крашит на етом моменте, а у него нет? И почему оно вобще в таком случае хочет отправлять 500, если уже отправлено 400...
Все, что с id - не возвращает - get по id, put по id - в постмане ошибка. я с postgresql работаю Вот код на getOne и Update async getOne(req, res) { try { const {id} = req.params if (!id) { return res.status(400).json({message: 'Id не указан!'}) } const post = await Post.findById(id) return res.json(post) } catch(e) { res.status(500).json(e) } } async update(req, res) { try { const post = req.body; if(!post.id) { return res.status(400).json({message: 'Id не указан'}) } let updatedPost = await Post.findByIdAndUpdate(post.id, post, {new: true}) return res.json(updatedPost) } catch(e) { res.status(500).json(e) } } id в постмане такого типа - "id": 6, не ищутся при поиске одного поста! У Тимура монго генерирует 16ти значные айдишники, при том, автоматом показано, что неизменный ._id Как поправить? При этом, post запросы работают посты в базу сохраняются Post.js - я использую sequelize: const sequelize = require('./db') const {DataTypes} = require('sequelize') const Post = sequelize.define('post', { // id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true}, // - с этой строкой и без нее - резалт одинаковый. author: {type: DataTypes.STRING, allowNull: false}, title: {type: DataTypes.STRING, allowNull: false}, content: {type: DataTypes.STRING, allowNull: false}, picture: {type: DataTypes.STRING} }) module.exports = {Post}
Тимур ты молодец! Никто не снимает такие уроки для бесплатных просмотров. Я очень рад что у нас есть такие люди, которые не просто готовы делиться своими знаниями но и преподносить это очень грамотно, четко и ясно. Я надеюсь что твой труд не напрасный, и что тебе воздастся это в тысячу и более раз. Желаю тебе удачи в жизни, а твоему творчеству и каналу процветания. Ну и конечно же здоровья
it-kamasutra прекрасные бесплатные плейлисты по части фронта и бэка. Так что не никто) Димыч очень дотошно разжевывает - так что дойдет даже гуманитарию =)
@@vlad-zf1evтолько после 5го видео тошнит от вступления
Реакт редакс ты знать будешь крутоооо....@@ІванВернігора
@@vlad-zf1ev ))), Димыча многие знают, но лучше их обоих смотреть...
Если тоже самое видео сделаете для новичков, но не Rest, а так же объясните GraphQL + PostgreSQL, Вам в раю отдельное место сделают
а если еще и NEST.js, то ващеее! :-)
@@vwn6735 будет скорее всего!)
@@UlbiTV Здорово, будем ждать :-) Но, если это еще и с GraphQL... то это будет то, чего на русском языке на Ютубе - нет! :-)
Кто смотрит в 2023 и у кого не робит POST и PUT в постмане - зайдите в Headers и в key поставте "Content-Type" а в value "application/json".
Спасибо за видео, лайк!
Спасибо большое!
Спасибо добрый человек!!!
Здравствуйте, какой Вы используете плагин, который отображает подсказку в объявлении функции?
Можно ли начинать изучение программирования, в частности backend, с JavaScript+Node.js?
Или лучше заходить туда через фронтенд?
Если можно, с чего лучше начинать?
Пишут, что фронтенд проще для начала. Я поизучал вёрстку, попробовал делать. Но понял, что не мое. Больше хочу делать содержание, а не внешку на клиентской части.
Буду благодарен за совет
Так пишут, ибо nodejs вытекает из обычного js, а его ты обычно используешь когда пишешь фронт. Больше практикуешься, понимаешь как работает клиентская часть, и уже потом ты на этой базе лезешь в бэк, чтобы понять как работают запросы для сервера, их обработка и тд.
Ты попробовал верстку, но там и намека нет на код, т.е на js даже например.
HTML/CSS -> JS -> Фреймворк(React, Vue, Angular) -> NodeJs и бэк. Это если путь который фронт проходит.
"какой-то комментарий..." так, на всякий случай))
хах)) Правильно, правильно!)
Человеки, если у кого то при подключении к бд, возникает ошибка -"codeName: 'AtlasError'", возможно вам поможет добавление нового ip с предоставлением доступа любому пользователю.
Для поддержки канала)) Давай серию уроков про jest, тестировать можно одно из тех приложений что ты делал в предыдущих видео. Думаю многим будет актуально.
здесь если что непонятно - поставьте на паузу и задумайтесь.. а я думаю
Как беспощадно время)
в 2022 по ходу урока пришлось доустановить:
express-form-data для парсинга тела запроса из form-data
в fileService пришлось пользовать fs.rename т.к. file.mv сказал что он не функция=)
с локальной монгой (т.к. облачная без впна теперь всё) тоже оказалось интересно, для подключения нужно создавать пользователя с правами на readWrite иначе не коннектилось (без указания юзера).
Пока что в начале пути, материал шикарен (структурирован, понятен). Классные уроки 👍
лайк, подписка и отдельный плейлист из ваших видео!)
Спасибо , сижу мучаюсь минут 20
предлагаю сделать видео для абсолютных "0". То бишь, например, с объяснений что такое json, в каких случаях нужен бэкенд. Например, для лендинга бэк не нужен, а для интернет-магазинов нужен. А зачем ecommerce нужен бэк? Чтобы как-то работать с бд? А зачем нужна бд? Чтобы, например, хранить auth данные о пользователях. А как, например, связать фронт и бэк между собой? Например, при пагинации, если у меня 500 html-страниц, то не буду ж я их вручную создавать. Соответственно, страницы должны подтягиваться с бэка или во фронте это можно сделать проще? Хер знает.
По поводу "как связать бэк и фронт между собой" и как сделать роутер, если у каждой страницы товаров url будет уникальным согласен. Думаю многие бы были благодарны освещению этих тем
я начинающий. По этому видео ничего не понятно. Может нужно не просто зачитать определения, а описать явление с разных сторон, рассусолить. Как уроки it-kamasutra например по js, реакту
[nodemon] clean exit - waiting for changes before restart
Что ей надо? Кто знает?
В общем, всем у кого выскочит данная ошибка, надо просто свой IP добавить в список IP Access List.
Какой-то косяк с пакетом *uuid*
У меня заработало только при импорте:
*_import uuid from 'uuid'_*
и, соответственно, использовании:
*_uuid()_*
Как всегда топ, можешь снять более углубленный курс по Node JS + Express JS, там с так как на русском очень мало информации по backend разработке
Плюсую!
Будет, планирую сделать мксимально глубокий курс по ноде, но это уже скорее всего будет на платной основе
@@UlbiTV сделай, пожалуйста, я точно заплачу
Ничего не понятно но интересно, уже второй раз смотрю и ничего не понимаю.
Но, во второй раз понимаю уже чуть больше.
Посмотрю в трейтий раз уже с написанием кода тогда думаю все встанет на свои места.
Блин, если бы ты не сказал, то я бы читал это как No Demon, а не как Node Mon 😂
Тимур, ты мой кумир.
И вопрос. Если мы сталкиваемся с непонятной ошибкой, пробуем решить своими силами, но не получается, то как искать решение? Как правило я копирую ошибку и гуглю ее. Приходится перелопатить много нерелевантной информации, прежде чем доберусь до нужного.
Вот например: отправляю POST raw json запрос через Postman. Запрос успешно срабатывает. Но как только отправляю тот же самый запрос через form-data, получаю ошибку "name": "ValidationError", "message":"Post validation failed: content: Path `content` is required, title: Path `title` is required., author: Path `author` is required." Все поля текстовые.
Тимур, ты злодей!
Заставил самого найти ошибку. Ошибка была опечаткой в импорте fileUpload.
От любви до ненависти один шаг...
такой формат то что нужно для меня
, лучший в ru сегменте сейчас
, хотелось бы больше тайпскрипта (твой контент идеален)
согласен, тайпскрипта побольше бы
Будет еще что-то по тайпскрипт я думаю)
@@chikenmacnugget помогает в разработке, уменьшает шанс появления ошибок при работе с данными
@@chikenmacnugget за счет типов которые помогут тайпскрипту ругаться на дева который решил например вызвать свойство которого не существует(js скажет "красавчик")
@@chikenmacnugget Я знаю что Илья Климов осветил вопрос надежности тайпскрипта, и он прав. Есть готовая к продакшну альтернатива?
пожалуйста подскажите каак вызвать функицю в момент 8:36, автор не сказал на что нажал (
Всем примет, подскажите, как называется расширение, что б высвечивалось содержание объектов в маленьких окошечках в коде, как у автора? Типа req :Request?
ТИМУР, ты рофлишь?)) Кем ты успел поработать в свой 21 год, что так много знаешь. РЕспект просто
+
Ахахах)) Да на самом деле ничего особенного) Спасибо!
Наверняка причина в том, что Тимур инвестировал своё время в изучение нового, а не в развлечения.
Это точно!
do slez.... na schet 404 eto uje nostalgiya :D spasibo bolshoe ;) podacha informatsii' otlichno!!!
Спасибо!)
Вижу Ulbi - ставлю лайк!
Спасибо!)
как Mongo узнал, что посты нужно кидать именно в коллекцию posts? где это указывается?
спасибо за видео, как всегда сначала лайк, потом просмотр!
Аналогично:)
Благодарю!)
@@djonyV Спасибо!)
🎯 Key points for quick navigation:
00:03 *🖥️ Введение в backend разработку и REST API*
- Курс предназначен для начинающих программистов и frontend разработчиков
- Рассмотрение основных теоретических моментов и практическое закрепление знаний
- Использование Node.js для разработки backend
01:10 *🔄 Клиент-серверное взаимодействие и основы HTTP*
- Обзор клиент-серверного взаимодействия
- Основы HTTP протокола и типы запросов (GET, POST, PUT, DELETE)
- Структура HTTP запроса: заголовки, тело запроса и статус-коды ответов
04:24 *🌐 REST API и CRUD операции*
- Понятие REST API и его преимущества
- Пример HTTP запроса и обработки на сервере
- CRUD операции: создание, чтение, обновление и удаление данных
06:29 *🛠️ Настройка проекта и первый сервер на Express*
- Установка Node.js и Postman
- Инициализация проекта и установка зависимостей
- Создание простого сервера на Express и обработка GET запроса
10:10 *🔧 Работа с запросами и параметрами*
- Использование nodemon для автоматической перезагрузки сервера
- Обработка query параметров в GET запросе
- Работа с телом запроса в POST запросе
12:53 *💾 Подключение базы данных MongoDB*
- Выбор и подключение базы данных к серверу
- Создание проекта в MongoDB Atlas
- Настройка кластера базы данных
13:48 *🗄️ Подключение к базе данных MongoDB*
- Создание пользователя и получение URL для подключения
- Установка и импорт библиотеки Mongoose
- Настройка подключения к базе данных с обработкой ошибок
16:47 *📝 Создание модели данных для постов*
- Описание схемы поста с полями: автор, заголовок, контент, изображение
- Создание и экспорт модели на основе схемы
- Пример создания и сохранения поста в базе данных
19:32 *🚀 Улучшение обработки запросов и ошибок*
- Возврат созданного поста клиенту
- Обработка ошибок при создании поста
- Реализация блока try-catch для предотвращения падения сервера
21:21 *🛣️ Создание и настройка роутера*
- Создание отдельного файла для роутера
- Описание маршрутов для операций CRUD с постами
- Регистрация роутера в основном приложении
23:56 *🎮 Создание контроллера для постов*
- Выделение логики обработки запросов в отдельный контроллер
- Реализация функций для каждого маршрута (create, getAll, getOne, update, delete)
- Подключение функций контроллера к соответствующим маршрутам
25:59 *💾 Реализация логики CRUD операций*
- Получение всех постов из базы данных
- Получение конкретного поста по ID
- Обработка ошибок и валидация входных данных
27:50 *🔍 Реализация функции получения поста по ID*
- Копирование ID существующего поста
- Отправка GET-запроса с ID в строке запроса
- Получение конкретного поста по ID
30:24 *🔄 Реализация CRUD операций*
- Создание endpoint'ов для создания, получения, обновления и удаления объектов
- Тестирование всех операций с помощью Postman
- Обработка ошибок при отсутствии ID
31:33 *🏗️ Введение в слои абстракции*
- Разделение логических частей приложения на отдельные модули
- Описание слоев: DAL (доступ к данным), контроллер, сервис
- Преимущества использования слоев абстракции
33:24 *🛠️ Реализация сервисного слоя*
- Создание файла post.service.js
- Перенос логики из контроллера в сервис
- Адаптация функций для работы без request и response
37:49 *📁 Работа с файлами и изображениями*
- Установка модуля express-fileupload
- Добавление обработки файлов в контроллер
- Создание отдельного сервиса для работы с файлами
42:35 *📁 Реализация функции сохранения файла*
- Создание функции для перемещения файла по указанному пути
- Обработка ошибок с использованием блока try-catch
- Импорт и использование файлового сервиса в post-сервисе
43:33 *🔄 Обновление объекта поста с добавлением информации о файле*
- Добавление поля picture к объекту поста
- Отправка запроса и устранение ошибки асинхронности
- Проверка сохранения файла в папке static
44:14 *🖼️ Настройка сервера для отдачи статических файлов*
- Использование функции express.static для обработки статических файлов
- Демонстрация доступа к сохраненному изображению через браузер
- Объяснение, как использовать полученный URL изображения в HTML-теге img
Made with HARPA AI
Что ты делаешь? Топ!!!
Благодарю!)
Огоо круто , спасибо за видео!
И тебе спасибо!)
Почему мы сначало ставим лайк, а потом смотрим видео))
Чувствую вашу поддержку!)
СПАСИБО
Спасибо, хорошее видео.
На сколько есть хорошим тоном вот такой экспорт - export default Class()?
Первый раз вижу инит класса на экспорте.
Сейчас MongoDB не работает из России. Приходится через VPN, видимо из-за этого "MongoServerError: bad auth : Authentication failed." Ещё "npm i -D nodemon" не работает, всеравно не появляется динамичного лога. Из-за этого и постман не видит сервер походу...
form-data не работает, пишет validation error типа поля обязательные а я их не указываю, это на моменте когда файл нужно загружать но через raw успех, ищу решение, внятного нету нигде
нашёл?
Вначале даже что-то понимал, и наивно думал, что на этот раз то я смогу досмотреть до конца и осознать истину!
(Наивный я и глупый :-) )
Ну досмотреть до конца хоть получилось?))
@@UlbiTV ближе к концу уже потерял нить повествования и не видел смысла досматривать) как нибудь соберусь и посмотрю заново
@@_GyG_ Успехов!)
Ну что, досмотрел?)
Я раз 5 пытался про ноду видосы смотреть и вообще не вдуплял че происходит, хотя реакт нормально заходил и вообще думал, что js более-менее знаю. Вернулся спустя какое-то время и на удивление что-то начал понимать
Нужно ещё снять видео про TypeSctipt в Node JS
народ кто подскажет по поводу jpg? на локалхосте все работает норм, на хероку, объект сохраняется с полем пикчер, но сама пикча видимо не сохраняется по тому что по запросу выдается 404 . кто знает че делать?)
Спасибо за видио! ты читаешь мысли)) только хотел узнать по подробней о бэке))
После того, как этот ролик будет предельно понятен, можно посмотреть курс про интернет магазин, он посложнее)
Ставлю 42 лайка. То, что нужно
то что нужно для меня-спасибо
лучший))
Спасибо!)
Круто! Спасибо! node.js express. RESTfull API, CRUD, HTTP
Рад слышать;)
Проверка наличие id, если мы его принимаем в query.params нормально не отрабатывает. Даже если никакой id не передаешь. Пробовал на length проверять - тоже не выводит ошибку.
Да, в данном случае она лишняя, поскольку если айди не передать будет отрабатывать уже другой ендпоинт
*Л а й к* за отличное видео
Спасиб!
Спасибо, очень интересный материал. Было бы интересно посмотреть на nest.js + postgresql.
Будет!) Спасибо!
спасибо ,как всегда супер ! RESTfull API, CRUD, HTTP, node.js, express
Спасибо!)
Спасибо вам как обычно!!
И вам спасибо!)
Супер! Формат контента лучший что я видел!
Спасибо, стараюсь!
Прикольный на самом деле урок. Помню как я маялся создавал бэк с постгрессом, потом прикручивал туда nginx, pm2 вроде, и самое забавное - основная цель была авторизация. И чёт как-то посложнее это всё было в реализации, jwt опять же пришлось юзать. При том что я полный ноль в бэке, т.к. фронт/джун. Автор, сделай доброе дело, запили доп урок с авторизацией, с использованием jwt и oauth2. Насколько я понял, оно сейчас почти на всех проектах так.
Да для фронта, еще если и с беком опыта нет, то вообще муть конечно) Про авторизацию есть урок на канале, возможно сниму более продвинутую версию попозже
Почему import а не require??
Тимур, почему в бекенде лучше не сделать на запись отдельный api например saveUser а на получение getUser. Зачем get post
Очень сложно во время просмотра не поставить лайк, спасибо тебе! Давай еще бэк для фронтов )) Сделаешь сферу образованее
А зачем uuid если можно вязать его hash ?
Да, можно)
@@UlbiTV я как-то жахнул статику с прода... вот за счет хеша, я просто заново отправил все картинки через сервис на бэкэнде, он сам поменял имена под хеш и все выровнялось, бд править не пришлось
Спасибо. Но у меня getOne и update не работает..
Высший класс!!! Это лучшее видео, которое Вы сделали!!! Респект!!! В этом видео нет ничего лишнего, и в тоже самое время есть всё необходимое. Вообще для начинающих бэкэндеров хочу пояснить - бэкэнд это две вещи: базы данных и написание эндпойнт методов, всё остальное - бюрократические процедуры
О, новое видео, всем приятного просмотра!👍 пойду ознакомлюсь, а потом опять к прошлому разбираться:)))
Особое спасибо за инфу, как использовать import вместо require, не знал, как правильно делать, а с ним код понятней:))) ну и слои абстракции были очень полезны, в остальном, закрепил знания, надеюсь🤣🤣🤣
@@ipa_stor Главное, что хоть что то было полезно!)
@@UlbiTV как это хоть что-то, все видео полезно, часть новые знания, часть закрепление старых:))) 👍
Как долго я тебя искал! Подписался!
Спасибо!)
оух жирненький видосик) сделай еще такое в этом духе, про шифрование, https с теорией и маленькой практикой. Хорошего тебе дня
красава, оч хорошо объясняешь по бэкенду
Классно!
Почему такой плохой звук... fifine k669 на алике стоит 2.5к всего...
Надо обновиться...Соглашусь
Крутое видео !)!) Все очень доходчиво и примеры хорошие)))
Благодарю!)
Spasibo ogromnoe, ochen nravitsya kak ti obyasnyaesh
Спасибо!)
Почему то при post запросе падает 404 ошибка
очередной какой-то коментарий
Для поддержки канала?)
Крытой урок!)
Спасибо!)
Крытый)
Вроде и понятно, пока повторяю, а сама написать не смогу...
ссылка на исходники не работает
поправил
Красавчик 🤝
классные уроки!
Очень полезное видео, только хотелось бы увидеть его продолжение например на реакте где будет уже +- показана отрисовка данных с бд и првязка этих всех запросов к конкретным кнопкам. Я +- понимаю что нужно делать пост запрос скорее всего, через мап отрисовывать все, считывать ид при удалении, но хотелось бы увидеть и понять это от вас. Спасибо.
Схожие задачи Тимур объясняет в курсе про mern диск, там и бэк и фронт, если не хотите ждать, можно ознакомиться там(конечно, если ещё этого не сделали:))) к слову, в том курсе достаточно подробно описано, как работать с запросами( react + axios)
@@ipa_stor Спасибо, Рус))
Есть курс, в одном видео, 2.5 часа идет по созданию интернет магазина, можно сказать это усложненная версия этого ролика) рекомендую
Привет. Куда идти после node js?
Спасибо за крутой контент!!! Канал - огонь!!! Вообщем, после этого урока запустил я впервые сервер на express и залил в mongoDB 16 пользователей - все у меня вывелись на фронте. Всё бы хорошо, но мне необходимо сделать постраничный вывод(пагинацию) по 4 пользователя на странице. Пролазил я 3 дня по форумам и видео с REST API, но так и не нашёл где в node следует вводить значения get-параметров(query string). Пробовал в postman создать 4 post-запроса по 4 пользователя с помощью params, вводя в key значение page , а в value номер необходимой страницы. В итоге в браузере ввожу «localhost:8888/api/users?page=2» и мне вместо пользователя 5, 6, 7 и 8 выводятся все 16. Подскажите, пожалуйста как в nodejs для endpoint устанавливать значение get-запросов, с помощью чего это делается и где именно, в каком файле? Развития каналу, спасибо за ваш труд!!!
Спасибо за отзыв!) в двух словах тут не отвечу, посмотрите курс по созданию интернет магазина на канале и найдете ответ на свой вопрос!
Привет. Будут ли уроки по Flutter в будущем?)
Есть у кого-нибудь мысли, как пофиксить форм-дату? Пробовал боди парсером и экспресс формдатой, не помогло, все так же не видит запросы с форм датой, но при этом raw работает корректно.
upd. попробовал взять зависимости из package.json автора, все заработало, видимо, с более высокой версией экспресса не работает.
4:34 Сколько времени смотрю, только сейчас понял, что канал Юлби тв, а не ЮАЙби тв
Отлично! Смотрю ролики и у Владилена Минина и у тебя и мне твои больше по душе)
Лучший урок который я видел
А сервера гугла, яндекса и т.д - это какие-то здоровенный железяки где-то расположенные? А если их, допустим повредили, ну там самолет упал или типа того)) Что будет?
Ахахах, ну в таком случае будет все печально
невероятно полезные уроки делаешь, спасибо!
Благодарю!
27:29 думаю нет смысла проверять есть id или нет, если get-запрос перешёл в '/posts', то всё что идет дальше (после '/posts/') будет считаться ид-шником.
А в put и delete имеет смысл.
Да, все верно!) Просто хотел на этом примере показать, как это впринципе делать)
В delete вроде тоже смысла нет, даже если есть проверка, сообщение "id не указан" все равно не приходит. Приходит ошибка, что нет роутера DELETE posts/
И еще при проверке id в put, нужно писать return res... так как если код на этом не остановится, далее сервер будет падать. Если id не указать в запросе конечно. Правда в видео вроде не упал и у меня тоже со второго раза начал падать, хз почему. Насколько я понимаю js, при любом респонсе нужно писать return
@@ivandanilin5690 У меня тоже упал. И я тоже видео в этом месте пересмотрел несколько раз. Автор этот момент тупо пропустил. Короче, я тоже сам догадался перед res написать return. Потом полез в комменты искать заметил ли кто-то кроме меня эту ошибку. Оказалось, я не один такой молодец)
Огонь! Спасибо большое!
А как можно тебе на карту задонатить? У меня кошельков нет, я всё с карты Сбера оплачиваю.
А, всё - там перевод с платёжной системы IO. Задонатил, спасибо огромное за контент!
Получил дружище, спасибо большое!)
Крутяк, то что надо для новичков
Чувак, 10 лайков 👍👍👍👍👍👍👍👍👍👍
43:39 ахаха фраза для мемасика, подойдет на все случаи жизни
Привет! хотел уточнить на этом сейчас актуально писать бек?
Неплохой урок, отлично дает представление о бекенд разработке на ноде.
p.s. огромное пожелание улучшить качество звука, возможно дело в микрофоне
Дружище а есть у тебя курсы на udemy express.Js?
Планировал сделать, но времени пока не хватает доделать
Чего-то у меня, как обычно, все через одно место. Вот что не так? :(
Делаю в Вижл студио код, ну собственно код в index.js
import express from 'express'
const PORT = 5000;
const app = express()
app.listen(PORT, callback: () => console.log('server' + PORT))
в 4й строке callback: двоеточие подчеркивает как ошибку, и код не работает
Callback убери, это подсказка от вебшторма, оставь просто () => ….
@@UlbiTV ахвононочто)))
Блин, спасибо, а то я весь гугль перерыл, что это такое, как оно работает и что вообще. А это оказывается подсказка от проги >_<
А так урок вроде доступный (если не считать моего затупка), спасибо, с меня плюсик и подписка :)
Давай авторизацию полного цикла с токенами рефрешами и всей обмазкой на фронте
Планирую такое, но когда, пока трудно сказать
Привет, Тимур а скажи каким образом ты используешь import/export в среде Node.js ?? вроде бы IDE ругается если не использовать require, или это плагин какой то?
Смотри внимательнее, Тимур про это указывает. На 8.10 мы прописываем в package.json новое поле type:'module'
На 2024 год курс устарел и нужны были доработки. Я постарался и сделал чуть лучше. У кого есть проблемы с кодом, пишите, помогу!
Есть. На моменте когда он убирает id из PUT, у него возвращается "id не найден" и все работает дальше. У меня при таком же самом коде и таком же действии возвращается в постмене то же самое, но сервер крашиться потому что "один код ошибки (400) уже отправлен (как раз наш "id не найден"), а код 500 нельзя отправить". Все же вопрос, почему у меня крашит на етом моменте, а у него нет? И почему оно вобще в таком случае хочет отправлять 500, если уже отправлено 400...
@@engardian9864 в блоке if поставьте return перед res.json.... чтобы код не пошел дальше если id не передан, тогда работает
Все, что с id - не возвращает - get по id, put по id - в постмане ошибка. я с postgresql работаю
Вот код на getOne и Update
async getOne(req, res) {
try {
const {id} = req.params
if (!id) {
return res.status(400).json({message: 'Id не указан!'})
}
const post = await Post.findById(id)
return res.json(post)
} catch(e) {
res.status(500).json(e)
}
}
async update(req, res) {
try {
const post = req.body;
if(!post.id) {
return res.status(400).json({message: 'Id не указан'})
}
let updatedPost = await Post.findByIdAndUpdate(post.id, post, {new: true})
return res.json(updatedPost)
} catch(e) {
res.status(500).json(e)
}
}
id в постмане такого типа - "id": 6, не ищутся при поиске одного поста!
У Тимура монго генерирует 16ти значные айдишники, при том, автоматом показано, что неизменный ._id
Как поправить?
При этом, post запросы работают
посты в базу сохраняются
Post.js - я использую sequelize:
const sequelize = require('./db')
const {DataTypes} = require('sequelize')
const Post = sequelize.define('post', {
// id: {type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true}, // - с этой строкой и без нее - резалт одинаковый.
author: {type: DataTypes.STRING, allowNull: false},
title: {type: DataTypes.STRING, allowNull: false},
content: {type: DataTypes.STRING, allowNull: false},
picture: {type: DataTypes.STRING}
})
module.exports = {Post}
подскажите из хорошего, что можно вместо MongoDb использовать (не работает в РФ и РБ)
Монго локально можно установить, не работает только облачный сервис
@@UlbiTV спасибо
Тимур какие техники защиты есть от скраппинга с вашего API сайта? А также защита от множественных запросов к api с клиента
Гитхуб код not found
исправил!
отдельное место в раю тебе мужик. СПАСИБО!!!
Да блин , и когда мне всё смотреть?!
Надо успевать!! годнота же!
import зря надо require юзать, но в целом 10/10
Лайк. Хотелось бы увидеть еще что-то по backend, связанное с регистрацией/авторизацией/созданием админ-панели и т.д.
Есть ролик про регистрацию\авторизацию на канале