使用mongoclient为所有路由设置一次mongodb node.js连接

时间:2016-06-08 06:58:42

标签: node.js mongodb

我是node.js和mongo db中的新手,我在所有路线中都完成了这样的代码。

var express       = require('express');
var router        = express.Router();
var mongo         = require('mongodb');
var MongoClient   = mongo.MongoClient;
var ObjectID      = mongo.ObjectID;
var collection;

//Connection to mongo db using mongo client
MongoClient.connect('mongodb://127.0.0.1:27017/mydb', function(err, db) {

    //connection error or success message
    if (err) {
        console.log('Unable to connect to the mongoDB server. Error:', err);
        throw err;
    } else {
        console.log("connected to the mongoDB");
    }

    //index
    router.get('/', function(req, res) {
        collection = db.collection('category');
        collection.find({}).toArray(function(err, category) {
            collection = db.collection('subcategory');
            collection.find({}).toArray(function(err, subcategory) {
                collection = db.collection('product');
                collection.find({}).toArray(function(err, product) {
                    collection = db.collection('banner');
                    collection.find({status: 'A'}).toArray(function(err, banner) {
                        console.log(banner);
                        res.render('home', 
                            {
                                title           : 'Home', 
                                categorys       : category,
                                subcategorys    : subcategory,
                                products        : product,
                                banner          : banner 
                            }
                        );
                    });
                });
            });
        });
    });
});
module.exports = router; 

请帮我建立一个共同的连接并从我的所有路由访问它,而不重复连接呼叫。提前谢谢

2 个答案:

答案 0 :(得分:1)

以下是草案代码,用于保持每个请求之外的连接(即连接一次)并重用数据库/集合变量。

NodeJS Mongo驱动程序默认连接池大小为5。

重要提示:db和categoryCollection变量保留在每个请求之外。

var express = require('express');
var mongodb = require('mongodb');
var app = express();
var MONGODB_URI = 'mongodb://127.0.0.1:27017/mydb';
var db;
var categoryCollection;
// Initialize connection once
mongodb.MongoClient.connect(MONGODB_URI, function(err, database) {
  if(err) throw err;

  db = database;
  categoryCollection = db.collection('category');
  app.listen(3000);
  console.log('Listening on port 3000');
});
app.get('/', function(req, res) { 
 categoryCollection.find({}).toArray(function(err, category) {  
 });                        
});

答案 1 :(得分:0)

您可以使用mongoose连接到您的mongo db。使用mongoose,您只需要连接到数据库一次,并且可以从所有路由访问。在你的app.js添加这些行

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test_db', function (err) {
if (err) throw err;

});

在您的路线中,您无需编写任何连接代码即可访问mongodb。