【发布时间】:2012-12-27 19:02:48
【问题描述】:
在一些旧代码中出现以下 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({name:'gogo'}) 导致 TypeError。当我删除 GroupSchema 中 UserModel 的 require 语句时,应用程序代码再次工作。
为什么 Javascript 开始认为 findOne() 是实例方法加上了 require 语句?
【问题讨论】:
标签: javascript node.js mongoose