046 Простой http сервер
И вот так выглядит создание самого простого сервера:
Запускаем сервер
И стучимся к нему
И вот так выглядит роутинг нашего приложения, который осуществляется через switch
Основная проблема такого подхода заключается в том, что нам нужно будет писать свои абстракции под каждое разбиение кода
047 Переходим на express
Установим экспресс
Инициализируем приложение на экспрессе
048 Маршрутизация
Мы можем очень просто реализовывать принятие любого http-запроса по определённому роуту для реализации определённого функционала
Мы имеем много разных видов обработчиков наших запросов:
post
get
put
patch
delete
all
- это обработчик, который срабатывает на любой вид обработки.
- Он представляет из себя
middleware
, который будет срабатывать до любого другого запроса
- Он запустится только если находится в самом верху - над остальными запросами по данному роуту
- Тут так же добавляется третий аргумент -
next
- он уже в себя принимает функцию, которая пойдёт дальше
И уже непосредственно между вызовом поста на фронте и на сервере сработал all
Так же мы можем воспользоваться паттернами при написании нашего запроса
Так же мы можем добавлять свои промежуточные коллбэки в наши запросы
Так же мы можем вызвать целый массив коллбэков, если на то нам потребуется воля
Так же мы можем на одну сущность повесить сразу несколько обработчиков
049 Ответы клиенту
И тут представлены основные ответы пользователю от сервера
050 Router
Далее мы можем воспользоваться конструктором Router
, который позволит создать уникальный роут для каждой функциональности
Конкретно тут мы описываем функционал для пользователя
users > uers.js
А тут уже импортируем через app.use
определённый роутер и через него можем раздельно получать запросы
index.js
И теперь мы можем получить отдельно по каждой ссылке свой запрос. Обращаемся по роуту /users
на ссылку /register
051 Промежуточные обработчики
Метод use()
позволяет сделать обработчик по типу all
, который срабатывает на все обработчики, поступающие на сервер данного приложения
index.js
Если мы расположим обработчик внутри дочернего элемента, а именно роута, то сработают оба обработчика - главный (у приложения) и дочерний (у роута)
users > uers.js
Так же мы можем определить, для какого конкретно обработчика будет работать use()
. Конкретно тут он будет работать как обработчик all()
И если расположить данный обработчик в конце приложения, то он будет отлавливать ошибки
index.js
И примерно так выглядит схема работы всех middleware
обработчиков:
- Отправляется запрос
- Потом он попадает в
use
обработчик нашего приложения
- Дальше он попадает в
use
обработчик конкретного роута
- Потом обрабатывается самим обработчиком, на который этот запрос был отправлен
- Затем уже он обрабатывается постобработчиком
use
, который уже принимает в себя первым параметром ошибку