2014-09-04 39 views
4

我在我的節點應用程序中使用快車3,我已經打破了我的路線到單獨的文件...數據庫連接周圍

app.use('/', routes); 
app.use('/users', users); 

的問題是,我需要一個數據庫連接在許多這些路線。我應該連接到每個路徑文件中的數據庫,還是可以連接到我的主應用程序文件中,並以某種方式將連接傳遞給包含?


我用express-generator來創建一個框架應用程序。 在app.js的路線都包含這樣的...

app.use('/', routes); 
app.use('/users', users); 

而且在對方這些文件有如下途徑...

var express = require('express'); 
var router = express.Router(); 

router.get('/', function(req, res) { 
    res.render('index'); 
}); 
+0

可以顯示如何'routes'或'users'定義? – 2014-09-04 16:15:48

+0

[如何正確地將mysql連接傳遞給express.js的路由](http://stackoverflow.com/questions/16800418/how-to-properly-pass-mysql-connection-to-routes-with-express -js) – edjroot 2016-03-28 23:20:57

回答

13

我只是保留在數據庫連接應用程序:

app.set('db',new MyDAO(config)); < - 使用您定義您的路線。

然後,路線裏面,get()post()我簡單地做

req.app.get('db').usercollection.find()

這樣你保持你的數據庫連接池連接到gloabl應用程序上下文。

替代常用的方法是在每個請求延長req,但每次執行:

app.use(function(req,res,next){ 
    req.db = db; //this db comes from app.js context where you define it 
    next(); 
}); 
+0

什麼是新的'MyDAO(config)'?如果我使用和尚並做了'var db = require('monk')('localhost/dbname');'那會是一樣的嗎?我的意思是它適用於我正在做的事情,只是不確定它是否與你描述的一樣。 – 2016-03-08 04:03:19

+1

是的。 Monk是Mongo的通用數據訪問對象(DAO)。這裏的'MyDAO'只是一個關於後端的抽象,以可讀和可維護的方式檢索和存儲對象。它通常具有'getUserById()'或'getTodaysBlogEntries()'或'addChatMessage()'或類似的業務邏輯特定方法。如果您將後端從MySQL更改爲Mongo,則無需更改上層的代碼,只需更換DAO即可。見例如https://en.wikipedia.org/wiki/Data_access_object – 2016-03-08 04:13:59