Структура приложения - 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
- development.json - файл конфигурации проекта, название файла обусловлено средой, в которой по умолчанию работает
- libs - здесь хранятся файлы либо расширяющие свойства и методы стандартных классов, либо классы, ради которых не стоит подгружать целую библиотеку.
- index.coffee - инициализатор модулей
- module.coffee - класс модуля, если от него унаследовать другой класс то становится возможно при помощи методов
@include
и@extend
расширять функциональность текущего класса другими классами или объектами, так называемыми примесями. Как это работает можно посмотреть здесь.
- public - здесь хранится код клиентской части
- coffeescripts - сюда можно создавать файлы на
CoffeeScript
и при подключении их к странице через/javascripts/[filename].js
будет загружена скомпилированная версия файла/javascript/[filename].coffee
- javascripts - библиотеки и файлы на js
- less - аналогично файлам на
CoffeeScript
можно выгружать через папкуcss
скомпилированные версии.less
файлов - css - стили клиента
- coffeescripts - сюда можно создавать файлы на
- 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
*
подробное описание файла формата путей
**
подробное описание контроллеров
***
подробное описание моделей