2011-12-08 74 views
21

說我有這樣的代碼在expressjs不同的途徑:的NodeJS/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

回答

32

這裏有一個類似的問題,你應該閱讀:How to structure a express.js application?

1)你的所有查詢邏輯應該在模型(駐留在模塊/模型爲例)

2放)分開所有路由(控制器)成模塊(並把它們在爲前/路由) 通過路由我的意思,例如: - 所有的邏輯爲「用戶」的路線進入/routes/users.js

儘量保持你儘可能使用MVC-ish。

小例子爲自己的應用上面:

app.js

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

路線/ 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'); 
    }); 
    }); 

} 

型號/ users.js

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

好的。是的,我試圖遵循mvc模式,但是我很難想象如何用expressjs來做到這一點。所以我可以按照我現在這樣做的方式做到這一點?並要求app.js中的所有路線?和模型,我如何分開它在上面的例子?鑑於我提供的代碼,您能否展示一個小例子?將不勝感激。 – georgesamper

+0

更新了我的文章 – alessioalex

+0

那麼現在完全有意義,非常感謝您清除:) – georgesamper

5

在expressjs下載包中,有一個名爲「mvc」的文件夾。作者提供了一個很好的例子,用於一個微小的&有效的mvc結構。通過代碼,你會得到很多靈感。

+2

這可以在repo [**'visionmedia/express' **](https://github.com/視覺媒體/快遞)在目錄[**'express/examples/mvc' **](https://github.com/visionmedia/express/tree/master/examples/mvc)對於那些對此感興趣的人我曾是。 –

1

express-train怎麼樣?我最近一直在使用它,它在複雜的應用程序結構中運行良好。