【问题标题】:Nodejs/Expressjs app structureNodejs/Expressjs 应用结构
【发布时间】:2012-01-15 17:24:49
【问题描述】:

假设我有这段代码来分隔 expressjs 中的路由:

module.exports = function(express,app,client) {

    app.get('/', function(req,res,next) {
        var query = 'SELECT * FROM users LIMIT 10';
        var user = client.query(query, function (err, results, fields) {
            res.render('index', {
                title: 'test',
                users: results
            });
            client.end();
        });
    });
}

并要求在app.js:

require('./controllers/routes.js')(express,app,client);

1) 如何以最佳方式将数据库查询分离到新文件中?

即使我分离数据库逻辑,这个文件也会变得非常大。

2) 分隔路线的好方法是什么?也许单独的模块?然后在app.js中要求它们?

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    这里有一个类似的问题,您应该阅读:How to structure a express.js application?

    1) 您所有的查询逻辑都应该放在模型中(例如位于 /models 中的模块)

    2) 将所有路由(控制器)分成模块(并将它们放入 /routes for ex) 路线我的意思是例如: - “用户”路由的所有逻辑都进入 /routes/users.js

    尽量让你的应用像 MVC 一样。

    上面你的应用的小例子:

    app.js

    // configuration for express etc
    require('./routes/index')(app)
    

    routes/index.js

    var model = require("../models/users.js");
    
    module.exports = function (app) {
    
      app.get('/', function (req, res, next) {
        model.get_recent(function (err, results) {
          // do stuff with your results
          res.render('index');
        });
      });
    
    }
    

    models/users.js

    module.exports = {
      get_recent: function(callback) {
        var query = "SELECT * FROM users LIMIT 10";
        database.query(query, callback);
      }
    }
    

    【讨论】:

    • 好的。是的,我正在尝试遵循 mvc 模式,但是我很难思考如何使用 expressjs 做到这一点。所以我可以像现在这样做吗?并要求 app.js 中的所有路由?以及模型,我如何在上面的示例中将其分开?鉴于我提供的代码,您能否举一个小例子?将不胜感激。
    • 嗯,现在说得很有道理,非常感谢您清除它 :)
    • 在我看来,在模型中使用数据库查询并不是非常 MVCish,但我想有很多方法可以做到。
    • 不应该是require('./routes')(app);吗?
    • @alessioalex 这行database.query(query, callback);不是要挂节点应用吗?我只是在编写类似的代码,但我的方法是为此使用一些事件。但我对节点有点陌生,不确定我是否做得对。
    【解决方案2】:

    在expressjs下载包中,有一个名为“mvc”的文件夹。作者提供了一个微小且高效的 mvc 结构的很好的例子。通读代码,你会得到很多启发。

    【讨论】:

    【解决方案3】:

    express-train 怎么样?我最近一直在使用它,它可以很好地处理复杂的应用程序结构。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-03
      • 2022-09-27
      • 2018-01-12
      • 2019-07-12
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 2012-09-09
      相关资源
      最近更新 更多