/Layers

Primary LanguageJavaScript

Разделение программы на слои. Выполнение https://github.com/HowProgrammingWorks/AbstractionLayers

Возможности:

  • динамические построение страниц
  • 301 редирект
  • 404 страница
  • отдача файлов (img, scripts и любых других)
  • кеширование страниц и файлов
  • работа с собственной базой данных json

Каталоги

  • libs - содержит js файлы программы.
  • libs/teplates - содержит js шаблоны для страниц
    • heads - шаблоны заголовков head
    • headers - шаблоны тега header (body)
    • footers - шаблоны тега footer (body)
  • public - находятся общедоступные файлы
    • img - содeржит картинки
    • scripts - скрипты для фронтенда
    • css - файлы стилей
  • database - база данных
    • goods - товары
    • categories - категории
    • pages - отдельные страницы сайта (/)

index.js

  • импортирует:
    • http
    • libj.js
    • constants
  • запускает createServer
    • сериализирует урл и запускает нужный вариант
  • обрабатывает ошибки созданного сервера

libs.js

  • импортирует все файлы, находящиеся в каталоге ./libs/
  • экспортирует lib

./libs/

  • consts.js, содержит константы:

    • PORT - номер порта для createServer
    • экспортирует consts
      • объект, созданный Object.create(null)
  • types.js

    • объект
    • содержит функции по типу данных.
    • экспортирет types
    • любая функция возвращает объект
      • { writeHead, data }
      • writeHead - массив с элементами для res.writeHead()
      • data - строка или буфер для res.end
      • пример { writeHead: [200], data: 'Good's page' }
  • urls.js

    • содержит маршруты
    • экспортирует urls и matching
      • объект urls
        • пример {
          '/': () => 'main.page',
          }
        • тип зачения:
          • string - переадресация
          • undefined - не найдено
          • function - выполнение
      • массив массивов matching
        • каждый массив содержит два элемента:
          • регулярное выражение для url
          • объект или функция (в зависимости от задачи)
  • urlsfn.js

    • объект
    • содержит определенный шаблон функций, который будет подставлен в urls.js для каждого конкретного урла
  • gettemplate.js

    • функция, вызывается изнутри подобранной функции types.js
    • принимает page и присваивает ей нужный шаблон.
      • если шаблона нет, то присваивает шаблон 404
      • шаблон находит из объекта urlstemplate.js
    • импортирует fs, path, urlstemplate.js
  • urlsTemplate.js

    • объект
    • содержит шаблоны для урлов
    • экспортирует urlsTemplate
  • classpage.js

    • class Page
    • при каждом запросе клиента создается экземпляр
    • экземпляр передается в подходящий сериализатор.
    • в процессе исполнения программы обновляются значения его свойств.
    • Как результат генериется html код, который будет отдан в res.end()
  • cache.js

    • функция cached
    • в замыкании хранит объект (Object.create(null));
    • получает урл и данные
      • урл - строка
      • данные вида { writeHead: [200], data: 'Good's page' }
  • connector.js

    • функция connector
    • аргументы:
      • name - имя базы данных
      • ...args - все остальрые аргументы
    • подключение нескольких баз данных.
    • найденную базу в виде функции вызывает и передает в нее захваченных в args аргументы.
    • результат возвращает:
      • массив, если есть результат
      • undefined, если нет
  • database.js

    • своя база данных
    • файлы json находятся в каталоге database
    • функция database
    • принимает в качестве аргументов:
      • имя таблицы
      • callback, который будет вызван для каждого элемента в таблице.
    • предварительно загружает json файлы в память и потом обращается уже без чтения файлов.
    • работает только на чтение.
    • результат возвращает:
      • массив, если есть результат
      • undefined, если нет
  • callbacks.js

    • набор запросов для database.js
    • вызывается для каждого элемента
    • в качестве this получает объект в котром будет нужное поле для отбора