如何在ExpressJS中处理MongoDB连接和查询

时间:2016-01-26 13:51:32

标签: node.js mongodb

我知道这个问题已经被问了好几次但我找不到我的具体问题的答案。

我使用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

1 个答案:

答案 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);
});
};