我正在使用NodeJS的ExpressJS web框架。
使用ExpressJS的人把他们的环境(开发、生产、测试……),他们的路线等放在app.js上。我认为这不是一个美好的方式,因为当你有一个大的应用程序,app.js太大了!
我想要这样的目录结构:
| my-application
| -- app.js
| -- config/
| -- environment.js
| -- routes.js
这是我的代码:
app.js
var express = require('express');
var app = module.exports = express.createServer();
require('./config/environment.js')(app, express);
require('./config/routes.js')(app);
app.listen(3000);
配置/ environment.js
module.exports = function(app, express){
app.configure(function() {
app.use(express.logger());
});
app.configure('development', function() {
app.use(express.errorHandler({
dumpExceptions: true,
showStack: true
}));
});
app.configure('production', function() {
app.use(express.errorHandler());
});
};
配置/ routes.js
module.exports = function(app) {
app.get('/', function(req, res) {
res.send('Hello world !');
});
};
我的代码工作得很好,我认为目录的结构很漂亮。然而,代码必须进行调整,我不确定它是否好/漂亮。
是更好地使用我的目录结构和调整代码或简单地使用一个文件(app.js)?
谢谢你的建议!
我给MVC风格的文件夹结构,请找到下面。
我们在大型和中型web应用程序中使用了波纹文件夹结构。
myapp
|
|
|____app
| |____controllers
| | |____home.js
| |
| |____models
| | |___home.js
| |
| |____views
| |___404.ejs
| |___error.ejs
| |___index.ejs
| |___login.ejs
| |___signup.ejs
|
|
|_____config
| |___auth.js
| |___constants.js
| |___database.js
| |___passport.js
| |___routes.js
|
|
|____lib
| |___email.js
|
|____node_modules
|
|
|____public.js
| |____css
| | |__style.css
| |
| |____js
| | |__script.js
| |
| |____img
| | |__img.jpg
| |
| |
| |____uploads
| |__img.jpg
|
|
|
|_____app.js
|
|
|
|_____package.json
我已经为生成express mvc文件夹结构器创建了一个npm模块。
请找到以下https://www.npmjs.com/package/express-mvc-generator
只需简单的步骤来生成和使用这个模块。
I)安装模块NPM
Ii)检查选项express -h
iii)生成express mvc结构express myapp
iv)安装依赖项:
v)打开config/database.js, Please configure your mongo db。
vi)运行应用节点app或nodemon app
vii)查看网址http://localhost:8042/signup或http://yourip:8042/signup
更新(2013-10-29):请参阅我的另一个答案,它有JavaScript而不是CoffeeScript的流行需求,以及一个样板github回购和一个广泛的自述me详细介绍了我对这个主题的最新建议。
配置
你做的很好。我喜欢在顶级配置中设置自己的配置名称空间。Coffee文件,具有这样的嵌套名称空间。
#Set the current environment to true in the env object
currentEnv = process.env.NODE_ENV or 'development'
exports.appName = "MyApp"
exports.env =
production: false
staging: false
test: false
development: false
exports.env[currentEnv] = true
exports.log =
path: __dirname + "/var/log/app_#{currentEnv}.log"
exports.server =
port: 9600
#In staging and production, listen loopback. nginx listens on the network.
ip: '127.0.0.1'
if currentEnv not in ['production', 'staging']
exports.enableTests = true
#Listen on all IPs in dev/test (for testing from other machines)
exports.server.ip = '0.0.0.0'
exports.db =
URL: "mongodb://localhost:27017/#{exports.appName.toLowerCase()}_#{currentEnv}"
这对于系统管理员编辑是友好的。然后当我需要一些东西时,比如DB连接信息,它
require('./config').db.URL
公路/加强一
我喜欢把我的路径留给我的控制器,并在app/controllers子目录中组织它们。然后我可以加载他们,让他们添加任何他们需要的路线。
在我的应用程序/服务器。我做的是:
[
'api'
'authorization'
'authentication'
'domains'
'users'
'stylesheets'
'javascripts'
'tests'
'sales'
].map (controllerName) ->
controller = require './controllers/' + controllerName
controller.setup app
我有这样的文件:
app/controllers/api.coffee
app/controllers/authorization.coffee
app/controllers/authentication.coffee
app/controllers/domains.coffee
例如在域控制器中,我有一个这样的设置函数。
exports.setup = (app) ->
controller = new exports.DomainController
route = '/domains'
app.post route, controller.create
app.put route, api.needId
app.delete route, api.needId
route = '/domains/:id'
app.put route, controller.loadDomain, controller.update
app.del route, controller.loadDomain, exports.delete
app.get route, controller.loadDomain, (req, res) ->
res.sendJSON req.domain, status.OK
的观点
在app/views中放置视图已经成为一种习惯。我是这样写的。
app/views/layout.jade
app/views/about.jade
app/views/user/EditUser.jade
app/views/domain/EditDomain.jade
静态文件
进入一个公共子目录。
Github/Semver/NPM
放一个自述文件。Md markdown文件在你的git回购根github。
放一个包裹。json文件,在你的NPM的git repo根目录中有一个语义版本号。