解决mongoose使用createConnection无效

mongoose一般有两种使用场景。

connect:连接单个db,同时也只能打开一个db,所以操作的时候默认都是操作同一个mongodb。
但是在业务中,有的时候需要js去控制多个db,这个时候如果用引入的同一个mongodb去connect就会报错Trying to open unclosed connection
这个时候就要用createConnection了。
createConnection使用有个需要注意的地方:

db = mongoose.createConnection('mongodb://localhost/dbName');
//在db的查询或者操作中使用db这个实例,而不是require('mongoose')实例。
db.once('open', function() {
var userSchema = new mongoose.Schema(Schema, {collection:dbName});
var User = db.model(dbName, userSchema);//这句是关键在connect中,User = mongoose.model(dbName, userSchema);

这样就能正确的操作数据库了。
其实原理很简单connect你永远操作的是require出来的mongoose 实例,它是缓存的,对js了解不太深,不知道能不能称为这有单利特性,而在createConnection中你操作的是createConnection返回的mongoose新实例。

如果发生Cannot overwrite `` model once compiled.错误,那就是重复定义了model,可以使用try - catch的方式去捕获错误。

try {
var User = db.model(dbName);
}catch (err){
var userSchema = new mongoose.Schema(Schema, {collection: dbName});
var User = db.model(dbName, userSchema);
}

你可能感兴趣的:(解决mongoose使用createConnection无效)