mongoose.model重复定义的问题
发布于 21天前 作者 tashuo 137 次浏览 来自 问答

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

回到顶部