我知道这个问题已经被问了好几次但我找不到我的具体问题的答案。
我使用express-generator
创建了一个示例应用,并创建了一个包含所有连接参数的模块。
/helpers/db.js
var MongoClient = require('mongodb').MongoClient;
var ObjectId = require('mongodb').ObjectID;
var url = 'mongodb://localhost:27017/piva';
var db;
var database = {
connect: function(){
MongoClient.connect(url, function(err, database) {
if(err) throw 'MongoDB connection error: ' + err;
console.log('connesso al db');
db = database;
});
},
useDb: function(){
return db;
}
}
module.exports = database;
如果我在主require('./helpers/db').connect()
文件中拨打app.js
,我需要使用
/routes/index.js
var db = require('../helpers/db').useDb();
router.get('/', function (req, res, next) {
db.collection('test')....
index.render({
title: 'Home page'
}, res);
});
它不起作用,因为db
返回undefined
,而如果我在router.get
内部需要它,它就可以正常工作。
我想我应该在应用程序加载之前启动连接,但我不知道如何处理它。
在app.listen(3000);
连接到数据库之后,我看到很多关于他们要求回拨Mongoclient.connect()
的内容或答案,但我不知道怎么做,因为我的应用已经创建了与express-generator
。
答案 0 :(得分:0)
像这样修改你的连接文件并调用init函数表单app.js.它将生成db对象,然后从任何你想要的地方调用它。
var MongoClient = require('mongodb').MongoClient;
var ObjectId = require('mongodb').ObjectID;
var url = 'mongodb://localhost:27017/piva';
module.exports.init = function(callback){
MongoClient.connect(url, function(err, db){
if(!err){
console.log('mongodb connected');
}
module.exports.db = db;
callback(err);
});
};