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