在Node Web应用程序中,您是否为每个HTTP请求打开一个MongoDB连接?

时间:2014-01-05 20:38:48

标签: javascript node.js mongodb express

我正在将MongoDB添加到我的Express.js Node网络应用程序中。这是我到目前为止所得到的:

// in app.js
var mongodb = require('mongodb');
var mongourl = /* … */;

// These are just examples:

app.get('/write', function (req, res) {
    mongodb.connect(mongourl, function (err, db) {
        db.collection('Users', function (err, coll) {
            coll.insert(/* stuff */, function (err) {
                res.send(200, 'Done.');
            });
        });
    });
});

app.get('/read', function (req, res) {
    mongodb.connect(mongourl, function (err, db) {
        db.collection('Users', function (err, coll) {
            coll.find({}, function (err, cursor) {
                cursor.toArray(function (err, items) {
                    res.send(200, items);   
                });             
            });
        });
    });
});

假设我想坚持使用默认mongodb driver(暂时):

  1. 这种模式对吗?我是否必须在执行数据库操作的每个不同路由中打开与数据库的新连接?

  2. 如果模式是正确的,那么我该如何处理这里明显的代码重复?显然,就目前而言,代码是不可接受的。

2 个答案:

答案 0 :(得分:2)

使用新标准MongoClient。它为您管理池,默认为5。

  //require as a module to be used anywhere.

  module.exports = {}  

  var MongoClient = require('mongodb').MongoClient;
  var mongoURI = /* … */;

  MongoClient.connect(mongoURI, function(err, db) {
    if(err) throw err;

    module.exports.users = db.collection('users');

    console.log('Connected to Mongo!')

  })

然后

var db = require('./db.js')

//once connected

//db.users.find()... etc

退房: http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html

汇集细节: http://mongodb.github.io/node-mongodb-native/driver-articles/mongoclient.html#connection-pool-configuration

答案 1 :(得分:0)

不要关闭并重新打开连接,你只是在丢失资源:s