Данное приложение затрагивает реализацию как интерфейса командной строки (command line interface - далее CLI), графический интерфейс (Graphic user interface - далее GUI), проще говоря - frontend часть сайта так и набор эндпоинтов (application programming interface - далее API), проще говоря Backend часть сайта.
Приложение написано на JavaScript ES5 синтаксисе в без архитектурного стиля в первой версии. Переписано на ES7 синтаксис со слоеной, модульной, архитектурой во второй версии. И переписано вновь уже на typescript в третьей версии приложения.
Приложение предназначено для подробного описания и реализации приложений на Node.js без использования фреймворков, а также реализация приложений на различных синтаксисах JavaScript и языке TypeScript Стек технологий:
- платформа Node.js
- fs / path - для работы с файлами
- crypto - для шифрования паролей
- url - для работы с URL адресом запроса
- dns - для проверок существующих IP адресов сайтов
- os / v8 - для вывода статистики по работе системы
- readline - для создания CLI
- child_process - для создания отдельного процесса под тяжелые задачи
- zlib - для сжатия файлов логирования
- http / https - для взаимодействия backend и frontend части посредством работы с протоколами
- util - для создания различных debug режимов, для разделения обработки ошибок в различных частях системы
Предлагается три варианта запустить и протестировать приложение: Запуск через архив на хост машине, и запуск непосредственно через Heroku instance (при запуске через Heroku будет запущена обрезанная версия приложения - без CLI и работы с API).
Чтобы запустить приложение на локальной хост машине, необходимо скачать проект из Git-репозитория и разархивировать его, после чего:
- Если версия проекта v1.0.0 или v2.0.0, то зайти в папку server и запустить проект с помощью команды:
node index.js
. - Если версия проекта v3.0.0, то зайти в папку server и запустить проект с помощью команды:
npm run dev
.
Перейти по ссылке.
- Создание приложений на Node.js без фреймворков
Здесь описан краткий обзор версии. Чтобы посмотреть полную информацию о версии нажмите: v1.0.0 - JavaScript ES5
Топорный вариант работы, когда весь модуль находится в одном файле. Использование var, а главный архитектурный вариант работы - создание объектов - контейнеров, куда как свойства добавляются методы - анонимные функции-callback.
Результат? Разработка проходит быстро и топорно, но само приложение является абсолютно не масштабируемым, поскольку через больше становится глобальные объекты - контейнеры, тем сложнее поддерживать его зависимости.
Здесь описан краткий обзор версии. Чтобы посмотреть полную информацию о версии нажмите: v2.0.0 - JavaScript ES7
Архитектурный вариант, когда сущности разделены, а каждый элемент сущности выведен в отдельный свой файл. Простым языком, если в первой версии все сущности были внутри одного объекта - контейнера, то теперь каждая сущность - это отдельная ветка с кодом. Сам код является слоёным: все константы и строковые значения вынесены в отдельным файл, работа с базой данных или файловой системой в файл сервиса, который реализовывает только эту логику и т.д.
Результат? Разработка проходит средне по времени, но само приложение является масштабируемым, поскольку сущности и функционал разделен как и файлами, так и классами.
В разработке
API предоставляет следующие возможности:
- Отправка ответа со строкой запроса, при запросе на несуществующий эндпоинт
- Сущность пользователей
- Создание пользователя
- Чтение пользователя по его номеру телефона.
- Изменения данных пользователя по его номеру телефона.
- Удаление пользователя по его номеру телефона.
- Сущность токена
- Создание токена
- Чтение токена по его ID.
- Изменения данных токена по его ID.
- Удаление токена по его ID.
- Сущность чека
- Создание чека в массиве пользователя, который авторизировался
- Чтение всех токенов конкретного пользователя.
- Изменения данных конретного чека пользователя.
- Удаление чека пользователя.
Подробнее про организацию кода и архитектуру командной строки можно почитать Здесь.
Интерфейс запускается после разворачивания всех основных задач, таким как обработчики логирования (Worker) и непосредственно сами веб сервера с http и https протоколами. При запуске интерфейса командной строки выводится сообщение: "Интерфейс командной строки успешно запущен".
Командная строка под капотом использует модуль readline
и работу events
, который на основе событий - ключевого слова команды, отдаёт ту или иную информацию.
Команда help
- позволяет получить список и описание всех команд.
Команда stats
- позволяет получить информацию по нагрузке и использованию ресурсов операционной системы.
Команды list users
и more user info --{userId}
позволяют получить список зарегистрированных пользователей, а также детали по каждому конкретному пользователю.
Команды list checks
и more checks info --{checkId}
позволяют получить список всех чеков в базе данных, а также детали по каждому конкретному чеку.
Команды list logs
и more log info --{logId}
позволяют получить список всех файлов логирования, а также детали по каждому конкретному файлу логирования.
Графический интерфейс состоит из нескольких страничек и машрутизации между ними.
Подробнее про организацию кода и архитектуру GUI можно почитать Здесь.
Главная страница
Страница регистрации
Страница логина
Страница создания чека
Страница доски с чеками
Страница настроек профиля