5
以下TypeError在某些旧代码中出现。模型的findOne方法上的Mongoose TypeError
TypeError: Object #<Object> has no method 'findOne'
最近受到影响的模型定义了两个新的静态方法,并且这些方法引用了外部模型。在退出新的静态方法之后,我能够确定根本原因是外部模型的require语句。该模式如下所示:
var UserModel = require('./user');
var GroupSchema = new Schema({
name: String,
users: [{ type : Schema.ObjectId, ref: 'UserModel'}],
});
GroupSchema.statics.findSomeUsers = function(group, callback) {
this.find({name : session_user._id}, function(err, groups) {
UserModel.find({_id : {$in : group.users}}, function(err,patients) {
// do magic
});
});
};
module.exports = mongoose.model('GroupModel', GroupSchema);
有在调用GroupModel.findOne({名称:“勾勾”})的应用程序中的代码片段导致类型错误。当我删除GroupSchema中UserModel的require语句时,应用程序代码再次运行。
为什么Javascript开始认为findOne()是一个添加require语句的实例方法?
./user.js是UserModel被定义的地方。那里没有要求。我不理解你的答案 - var UserModel = mongoose.model('UserModel') - 失败是因为它不知道模式是什么(它是在user.js中定义的)。 – Greg
删除require,并将UserModel.findOne()更改为mongoose.model('UserModel')。findOne() – Greg
您是否在''。/ user''中定义了'UserModel'?像'module.exports = mongoose.model('UserModel',UserSchema);'?如果你有,那么'mongoose.model('UserModel')'应该可以正常工作。至于循环要求,我不确定它是你的情况,但它看起来像。 –