mongoose.model重复定义的问题
发布于 9 年前 作者 tashuo 6113 次浏览 最后一次编辑是 8 年前 来自 问答

定义一个文件 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时也可以使用

回到顶部