Структура приложения - ovcharik/TravelFoot GitHub Wiki

Базовые принципы

Приложение построено на основе схема проектирования MVC, но с одним недостатком. Не удалось организовать класс моделей так, что бы в нем можно было писать бизнес логику, поэтому будут использоваться толстые контроллеры.

Этапы запуска сервера

Инициализация всего приложения происходит в index.coffee, который находится в основной директории проекта. После загрузки всех библиотек, приложение создает три инстанции классов для доступа к:

  • базе данных (mongoose, в приложении используется класс Database)
  • http server (используется стандартный для nodejs http сервер)
  • web sockets (SocketIO, пока никак не используется).

Сокеты работают над http сервером, а обработкой http запросов, занимается приложение построенное на основе Express. Эта библиотека позволяет удобно спроектировать обработку всех http запросов, и в данный момент все что написано в папке app/web работает поверх express.

Структура файлов

  • index.coffee - инициализация всего приложения
  • config - здесь хранится конфигурация приложения
    • index.coffee - класс настроек, на основе nconf
    • environments - здесь хранятся непосредственно конфиги в формате json
      • development.json - файл конфигурации проекта, название файла обусловлено средой, в которой по умолчанию работает nodejs. В линуксе есть переменная NODE_ENV, которая задает среду запуска, если она не задана, то по умолчанию равняется development
  • libs - здесь хранятся файлы либо расширяющие свойства и методы стандартных классов, либо классы, ради которых не стоит подгружать целую библиотеку.
    • index.coffee - инициализатор модулей
    • module.coffee - класс модуля, если от него унаследовать другой класс то становится возможно при помощи методов @include и @extend расширять функциональность текущего класса другими классами или объектами, так называемыми примесями. Как это работает можно посмотреть здесь.
  • public - здесь хранится код клиентской части
    • coffeescripts - сюда можно создавать файлы на CoffeeScript и при подключении их к странице через /javascripts/[filename].js будет загружена скомпилированная версия файла /javascript/[filename].coffee
    • javascripts - библиотеки и файлы на js
    • less - аналогично файлам на CoffeeScript можно выгружать через папку css скомпилированные версии .less файлов
    • css - стили клиента
  • app - само приложение
    • helpers - примеси, которые можно добавлять к различным классам. Созданы для того, чтобы лишний раз не наследовать и не дублировать логику в разных частях приложения
    • models - модели, но все описание модели сводится к имени и схеме. Уже не только ***
    • socket - не используется
    • web - веб приложение занимающееся обработкой запросов пользователя
      • index.coffee - класс приложения, инстанция которого создается при запуске сервера, в объекте этого класса создаются пути по которым определяется что будет обрабатывать запрос пользователя.
      • router.coffee - класс создания путей на основе информации в routes.json. Так же он создает инстанцию конкретного контроллера на каждый запрос, которому и передает управление
      • routes.json - формат* описания путей обработки запросов
      • controllers - контроллеры**, обрабатывающие запрос пользователя
        • index.coffee - инициализация контроллеров
        • base.coffee - базовый класс для контроллеров, в котором есть стандартные методы обработки фильтров и формирования ответа
        • application.coffee - класс от которого наследуются остальные обработчики запросов приложения. Он может содержать фильтры и методы, которые могут понадобится во всех других классах. Например, на текущий момент в нем есть методы определения текущего авторизованного пользователя.
        • *.coffee - все остальные классы - это обработчики конкретных запросов, которые разрешаются, через routes.json
      • views - шаблоны страниц для ответа пользователю, используется шаблонизатор jade

* подробное описание файла формата путей

** подробное описание контроллеров

*** подробное описание моделей