在mongoose中跨整个应用程序共享数据库连接

时间:2012-12-14 05:54:30

标签: node.js mongodb mongoose

使用最新的mongoose更新,您不再能像我一直在使用模型那样使用模型。我需要在整个应用程序中共享相同的数据库连接。

https://github.com/LearnBoost/mongoose/issues/1249

以下是不再有效的旧方式:

./模型/ user.js的

var mongoose = require('mongoose'), cfg = require('../config')
, Schema = mongoose.Schema
, db = mongoose.createConnection(cfg.mongo.uri, cfg.mongo.db);
...

module.exports = db.model('Item', ItemSchema);

如何在上面的github问题中建议重新使用数据库连接?

我在代码库中的几个不同位置使用var User = require('./models/user');

1 个答案:

答案 0 :(得分:9)

选项1:使用共享对象

我的模型代码看起来很相似,但是在应用程序启动时我只需要一次,而不是重复地需要模块,然后将结果分配给共享对象。例如,如果您使用快速应用程序,则可以使用app.locals.models.User = require('./models/user');之类的内容。然后,任何可以访问app的内容都可以看到您的模型而无需任何要求。


选项2:确保导出函数中的单个修改

您可以像这样定义用户模块:

var mongoose = require('mongoose');

var userSchema = new mongoose.Schema({name: String});

var User = null;

module.exports = function(db) {
  if (db && User === null) {
    User = db.model('User', userSchema);
  }
  return User;
};

当您启动应用程序时,您只需:require('./models/user')(db)。您应用程序中其他模块的后续要求可以删除db参数,因为User只会设置一次。