我正在使用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)?
谢谢你的建议!
1)你的Express项目文件系统可能是这样的:
/ ...
/lib
/node_modules
/public
/views
app.js
config.json
package.json
app.js -你的全局应用容器
2)模块主文件(lib/mymodule/index.js):
var express = require('express');
var app = module.exports = express();
// and load module dependencies ...
// this place to set module settings
app.set('view engine', 'jade');
app.set('views', __dirname + '/views');
// then do module staff
app.get('/mymodule/route/',function(req,res){ res.send('module works!') });
3)在main app.js中连接模块
...
var mymodule = require('mymodule');
app.use(mymodule);
4)样本逻辑
lib/login
lib/db
lib/config
lib/users
lib/verify
lib/
/api/
...
lib/
/admin/
/users/
/settings/
/groups/
...
最适合测试
最适合规模
分开取决于模块
按功能(或模块)分组路由
tj说/在Vimeo上展示有趣的想法如何模块化表达应用程序-
使用Node.js和Express的模块化web应用程序。强大而简单。
这是我的大多数express项目目录结构的外观。
我通常使用express dirname来初始化项目,请原谅我的懒惰,但它非常灵活和可扩展。PS -你需要为此获取express-generator(对于那些正在寻找它的人来说,sudo npm install -g express-generator, sudo因为你正在全局安装它)
|-- bin
|-- www //what we start with "forever"
|-- bower_components
|-- models
|-- database.js
|-- model1.js //not this exact name ofcourse.
|-- .
|-- node_modules
|-- public
|-- images
|-- javascripts
|-- controllers
|-- directives
|-- services
|-- app.js
|-- init.js //contains config and used for initializing everything, I work with angular a lot.
|-- stylesheets
|-- routes
|-- some
|-- hierarchy
.
.
|-- views
|-- partials
|-- content
|-- .env
|-- .env.template
|-- app.js
|-- README.md
你一定想知道为什么是。env文件?因为他们工作!我在我的项目中使用了dotenv模块(最近很多),而且它很有效!在app.js或www中弹出这两个语句
var dotenv = require('dotenv');
dotenv.config({path: path.join(__dirname + "/.env")});
另一行用于快速设置/bower_components以在资源/ext下提供静态内容
app.use('/ext', express.static(path.join(__dirname, 'bower_components')));
它可能适合那些希望同时使用Express和Angular的人,或者只需要表达而不需要javascript层次结构的人。