使用最新的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');
。
答案 0 :(得分:9)
我的模型代码看起来很相似,但是在应用程序启动时我只需要一次,而不是重复地需要模块,然后将结果分配给共享对象。例如,如果您使用快速应用程序,则可以使用app.locals.models.User = require('./models/user');
之类的内容。然后,任何可以访问app
的内容都可以看到您的模型而无需任何要求。
您可以像这样定义用户模块:
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
只会设置一次。