Node.js:使控制器文件中的db变量可用

时间:2017-06-15 00:46:13

标签: javascript node.js

我对node.js相当新。

当我启动应用程序时,我正在使用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;

然后它似乎有效,但从我所读到的,全局设置并不是理想的解决方案。能够从控制器文件访问数据库的适当方法是什么,而不必在每个文件中设置数据库连接。

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

您似乎可以直接在路径文件中设置并使用db,因为您实际上并未在主文件中使用db。如果它那么简单,那么我选择这样做:

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

或者,如果您需要在主文件中设置db并将其传递到路径文件和/或其他模块,而不是直接在路径文件中导出路由器,请导出{{1} }将function作为输入并返回db。然后,当您router时,您可以将db传递到路线模块。

require