2017-06-15 27 views
0

我對node.js相當陌生。Node.js:使控制器文件中的db變量可用

我目前使用lowdb爲我的數據庫,而我得到的應用程序啓動。

在index.js文件我有:

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var request = require('request'); 
var path = require('path'); 
var low = require('lowdb'); 
var db = low('db.json'); 
var routes = require('./routes'); 

app.set('view engine', 'ejs'); 
app.set('views', path.join(__dirname, 'views')); 

app.use(express.static(path.join(__dirname, '/public'))); 
app.use('/', routes); 

server.listen(3000, function(){ 
    console.log('listening on port 3000'); 
}); 
在我的路線

接檔我有類似:

var express = require('express'); 
var router = express.Router(); 
var account = require('./controllers/accounts.js'); 

router.post('/login', account.login); 

router.get('/', function(req, res){ 
    res.render('home'); 
}); 

module.exports = router; 

最後,在我的帳戶控制我有:

exports.login = function(req, res){ 
    var email = req.body.email; 
    var password = req.body.password; 
     ... 
} 

到控制器系統的路由工作。不過,我需要從我的所有路由控制器函數(也可能在其他地方)訪問lowdb對象。

如果app.js我設置:

global.db = db; 

然後好像工作,但是從我已閱讀,統一設置,這不是理想的解決方案。能夠從控制器文件訪問數據庫的適當方式是什麼,而不必在每個文件中設置數據庫連接。

回答

0

在你index.js文件(應用程序根)存儲lowdb對象在express對象:

var app = express(); 
var db = low('db.json'); 
app.db = db; 

在你的控制器(accounts.js),與req.app.db訪問數據庫:

exports.login = function(req, res){ 
    var email = req.body.email; 
    var password = req.body.password; 
    var db = req.app.db; 
} 
0

它看起來就像你可能直接在你的路由文件中設置並使用db,因爲你實際上並沒有在主文件中使用db。如果就這麼簡單,那麼我做這件事選擇:

// routes file 
var low = require('lowdb'); 
var db = low('db.json'); 

另外,如果你需要設置你的db主文件,並將其傳遞到路線文件和/或其他模塊,而不是出口的路由器直接在路由文件中,導出一個function,它將db作爲輸入並返回router。然後你可以通過db進入路線模塊,當你require它。

// routes file 
module.exports = function (db) { 
    // router setup using the input `db` 
    // ... 
    return router; 
} 

// index.js 
var low = require('lowdb'); 
var db = low('db.json'); 
var routes = require('./routes')(db); 
相關問題