我正在使用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)?

谢谢你的建议!


当前回答

我不认为在配置中添加路由是一个好方法。一个更好的结构可以是这样的:

application/
| - app.js
| - config.js
| - public/ (assets - js, css, images)
| - views/ (all your views files)
| - libraries/ (you can also call it modules/ or routes/)
    | - users.js
    | - products.js
    | - etc...

products。js和users。js会包含所有的路由和逻辑。

其他回答

我最近把模块当成了独立的小应用。

|-- src
  |--module1
  |--module2
     |--www
       |--img
       |--js
       |--css
     |--#.js
     |--index.ejs
  |--module3
  |--www
     |--bower_components
     |--img
     |--js
     |--css
  |--#.js
  |--header.ejs
  |--index.ejs
  |--footer.ejs

现在对于任何模块路由(#.js),视图(*.ejs), js, css和资产都是相邻的。 子模块路由设置在父文件#.js中,有另外两行

router.use('/module2', opt_middleware_check, require('./module2/#'));
router.use(express.static(path.join(__dirname, 'www')));

这样甚至子模块也是可能的。

不要忘记将view设置为src目录

app.set('views', path.join(__dirname, 'src'));

我不认为在配置中添加路由是一个好方法。一个更好的结构可以是这样的:

application/
| - app.js
| - config.js
| - public/ (assets - js, css, images)
| - views/ (all your views files)
| - libraries/ (you can also call it modules/ or routes/)
    | - users.js
    | - products.js
    | - etc...

products。js和users。js会包含所有的路由和逻辑。

我认为这是一个很好的方法。不限于表达,但我在github上看到了相当多的node.js项目做同样的事情。它们将配置参数+较小的模块(在某些情况下是每个URI)分解到单独的文件中。

我建议你浏览一下github上的express-specific项目。在我看来,你的做法是正确的。

我给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

你可能会感兴趣:

https://github.com/flatiron/nconf

带有文件、环境变量、命令行参数和原子对象合并的分层node.js配置。