如何在NodeJS中构建模型和视图?

时间:2011-06-24 15:18:04

标签: node.js theory directory-structure serverside-javascript file-structure

我正在编写基于NodeJS的服务器端和客户端JavaScript应用程序。我有控制器,模型,视图和演示者。我面临的问题是代码的某些部分只需要服务器端,某些客户端和部分端口。

例如,控制器对我来说是纯服务器端的东西,因此它们不应该在客户端可用。另一方面,演示者是纯客户端的东西,所以应该在客户端提供。

看看我目前的糟糕结构:

project\
project\public\index.js
project\public\images\
project\protected\controllers\
project\protected\models\
project\protected\views\
project\protected\presenters\

我面临的问题是公用文件夹是文档根目录,受保护文件位于文档根目录之外。我需要能够在客户端和服务器端使用Views。所以,我的观点不能受到保护。这同样适用于模型和其他大量的东西。我也需要能够在客户端访问它们。

我开始认为我必须将整个结构放在文档根目录下,但某些配置文件除外。这是我应该做的吗?这种方法有什么问题吗?我问,因为大多数Web框架(Django,Zend Framework)的工作方式是框架在文档根目录之外。

1 个答案:

答案 0 :(得分:3)

My github structure(过时)

-- Main level
project\
-- Your main app. Keep light
project\app.js
-- All your configuration, development/production setups
project\app-configure
-- Your server-side controllers/routing. Keep light
project\controllers\
-- Any WebSocket specific code.
project\socket-io\
-- Server side test
project\test\
-- Your public folder. Client side can access these files.   
-- Serve this folder as static content
project\public\
-- I keep my backbone collections here. Used on both server & client
project\public\collections
-- public css files
project\public\css
-- public js files. Including a main.js to bootstrap the router
project\public\js
-- public models used on both server & client.
project\public\models
-- client side router, used to router hashbang urls. Can use same routing
-- logic as the server. This is virtually a second set of controllers around
-- All your models
project\public\routers\
-- public tests. QUnit based
project\public\test\
-- View files
project\public\views
-- Templates used to render HTML. Used on client & server
project\public\views\templates
-- Backbone view files. Used to code up interaction, and business logic
-- This uses templates to render HTML and DOM events to handle interaction
project\public\views\backbone-views

这基于expressbackbone。控制器是express-controllers public \ routers是使用davis

的客户端路由

基本上因为MVC在客户端和服务器上被大量重复使用,唯一不公开的是服务器端测试和服务器端控制器。以及配置设置和任何基于socket-io的代码。

我的建议很简单,两者中使用的任何内容都在\public\

因为MVC在客户端和服务器上重复使用是一件新事物,所以没有任何可以看的例子。除了在github上搜索大型开源node.js网站。