Структура папок как для серверной, так и для толстой клиентской веб-приложения

В настоящее время я использую Node.js для бэкэнд и extjs или магистрали для клиента, и теперь я полностью запутался в структуре папок.

С помощью express моя структура папок выполняется следующим образом

appname
  |--controllers
  |--models
  |  |--appmodel.js
  |--public
  |  |--css
  |  |--js // any client-side javascripts
  |--routes
  |  |--router.js
  |--views
  |  |--appview.ejs
  |--app.js

где app.js - это точка входа, и она использует router.js для обработки маршрутизации и рендеринга представлений. Это работает отлично, если это только серверная разработка. Теперь, если я хочу использовать ExtJS или Backbone для клиента, как мне организовать мой код? Должен ли я добавить его в папку public или views?

appname
  |--controllers
  |  |--extbasedcontroller.js // correct location?
  |--models
  |  |--appmodel.js
  |  |--extbasedmodels.js // correct location?
  |--public
  |  |--css
  |  |--js
  |  |  |--extjs // extjs files
  |--routes
  |  |--router.js
  |--views
  |  |--appview.ejs
  |  |--extbasedview.ejs // correct location?
  |--app.js

Если это так, где я должен поставить модель для своих файлов extjs? Если я поместил его в папку models, мне кажется, что я смешиваю код клиента и сервера в одной папке, и это будет путать...

Ответ 1

На вашем месте я бы сделал так:

appname
  |--ServerCode
  |  |--controllers
  |  |--models
  |  |  |--appmodel.js
  |  |--routes
  |  |  |--router.js
  |  |--views
  |  |  |--appview.ejs
  |  |--app.js
  |--public
  |  |--css
  |  |--js // any client-side javascripts
  |  |--models
  |  |--controllers
  |  |--...

Основная идея состоит в том, чтобы поместить общую папку вне области вашего сервера javascript.

См. пример здесь: https://github.com/madhums/node-express-mongoose-demo/

Ответ 2

Просто поместите все /webapp под /public, чтобы вы прекратили создание, например, внешних моделей под /public/webapp/models

appname
  |--models
  |  |--appmodel.js
  |--public
  |  |  |--webapp // extjs/backbone files
  |  |  |  |--models
  |  |  |  |--controllers
  |  |  |  |--css
  |  |  |  |--js
  |  |  |  |--img
  |  |  |  |--views
  |  |  |  |  |--appview.ejs
  |  |  |  |  |--extbasedview.ejs
  |--routes
  |  |--router.js
  |--app.js

Ответ 3

Вот моя предлагаемая структура папок:

appname
  |--webapp
  |  |--img
  |  |--js
  |  |  |--controllers
  |  |  |  |--controller.js
  |  |  |--something.js
  |  |--css
  |  |--views
  |  |  |-- appview.ejs
  |  |--index
  |  |--404 etc.
  |--app.js
  |--package.json
  |--README
  |-- etc.

Я думаю, что это очень аккуратно и легко ориентироваться, потому что весь сервер и node_modules находятся снаружи, а файлы, которые мне нужны для приложения, находятся в папке "webapp" . Если вам действительно нужна папка с именем "public" (я не могу помнить, что она нужна для экспресс-потребностей или нет), я думаю, вы можете просто переименовать папку "webapp" в "public" или переместить папку "webapp" внутри "public" . Я бы также рекомендовал использовать AngularJS вместо .ejs, но делать то, что вы хотите сделать.:)