mongoose.model重复定义的问题
定义一个文件 user.js:
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test',function(err){
if(err){
console.log('message mongodb connect failed: '+err);
}
});
module.exports = function(){
var userSchema = new mongoose.Schema({
username: String
});
mongoose.model('User', userSchema);
}
然后在另一些文件中调用:
...a.js
require('user.js')();
//下面是mongodb对User的操作
...
多个文件调用时会出现重复定义的报错: Cannot overwrite 'User' model once compiled
请问该怎么处理这种重复定义的问题,或者说怎么定义mongoose的数据集供其他代码逻辑调用?
4 回复
module.exports =mongoose.model('User')
或
var user = mongoose.model('User')
这个问题之前我碰到过,在长连接的情况下通过不同的路径引入model就会出现这个问题。 后来找了两天,解决办法如下: try { var model=base.db().model(‘user.account’, UserAccountSchema); } catch(e) { if (e.name === ‘OverwriteModelError’) { model=base.db().model(‘user.account’); } } 2L的方法应该是正确的。
@jinceon 谢谢 这种方法确实可以解决重复定义的报错,只是它报错的原因是什么,而这种方法又是怎么避免了重复定义?
@Chen-xy 嗯这种方法看起来就是可行的,是否可以写成一个方法,这样调用其他model时也可以使用