###Дипломный проект факультета веб-разработки Яndex.Практикум. ####( 18 поток, группа 18-sienna )
Сервер размещён на личной VDS по адресу api.kspshnik.xyz/movies, ip [176.113.82.177] (https://176.113.82.177). Дополнительную безопасность работы с API обеспечивает применение протокола https: c использованием выпущенного Let's Encrypt! сертификата SSL, но возможна и работа по незащищённому соединению по протоколу http:.
/routes
— папка с файлами роутеров
/helpers
— функции-хелперы, вынесенные ради понятности и DRY
/controllers
— папка с контроллерами
/models
— модели Mongoose
/errors
— классы пользовательских ошибок
/joiSchemes
— схемы Joi для валидации c помощью celebrate
/middlewars
— промежуточные обработчики: авторизационная, обработка ошибок, пре-валидация, журналирование запросов и ошибок.
npm run start
— запускает сервер
npm run dev
— запускает сервер с hot-reload
Для первичного развёртывания на сервере проводится клонирование из GitHub-репозитория, установка только необходимых для промышленной эксплуатации зависимостей. Запуск производится с помощью менеджера задач pm2, обеспечивающего бесперебойную работу и перезапуск сервера в случае ошибок.
В дальнейшем при внесении изменений в кодовую базу используются размещённые в package.json
скрипты, вытягивающие изменения из репозитория, с помощью rsync копируются в рабочий каталог проекта, и осуществляется перезапуск сервера.
Для создания сервера используется каркасная библиотека Express.js. Объявление и запуск сервера разделены на App.js
и index.js
соответственно. Маршрутизация запросов осуществляется с
помощью express.Router()
ов, которые размещаются в отдельных файлах и подключаются в единой точке: модуле server.js
с помощью app.use()
. Сам же главный роутер подключается в основной точке входа приложения. Там же осуществляется инициализация приложения и подключение защитных прмежуточных обработчиков: helmet
, cors
, санитайзеров, обеспечивающих проверку и обезвреживание вредоносного кода в теле и/или параметров запроса. Также в app.js
подключены промежуточные обработчики для журналирования поступающих запросов. Внутри каждого роутера запросы распределяются по контроллерам, ответственным за получение данных и отправку ответа на запрос.
Дополнительно создан контроллер ошибки 404, который используется в роутере для сообщения о неверном пути к ресурсу.
В целях минимизации ошибок и повышения качества кода использовался статический анализ с помощью ESLint. За основу было взято руководство по стилю компании AirBnB (airbnb-config-base), расширенное и дополненное в соответствии с используемыми технологиями и инструментарием.
Для форматирования кода с одной стороны был использован .editorconfig
, что при использовании соответствующего расширения IDE позволяет автоматически выполнять большинство требований по оформлению, переложив их на плечи IDE, с другой стороны в проекте как dev-dependency установлен Prettier, и подключён как правило ESLint, так что форматирование кода осуществлялось автоматически при каждом статическом анализе.