Разделение программы на слои. Выполнение 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
- объект или функция (в зависимости от задачи)
- каждый массив содержит два элемента:
- объект urls
-
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 получает объект в котром будет нужное поле для отбора