Loại lỗi sau được cắt lên trong một số mã cũ.Mongoose LoạiError trên phương pháp findOne của mô hình
TypeError: Object #<Object> has no method 'findOne'
Mô hình bị ảnh hưởng gần đây có hai phương pháp tĩnh mới được xác định và những phương pháp được tham chiếu bên ngoài mô hình. Sau khi sao lưu các phương thức tĩnh mới, tôi đã có thể xác định nguyên nhân gốc là các câu lệnh yêu cầu của các mô hình bên ngoài. Các mô hình trông giống như sau:
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);
Có một đoạn mã trong các ứng dụng mà các cuộc gọi GroupModel.findOne ({name: 'gogo'}) dẫn đến TypeError. khi tôi xóa câu lệnh require cho UserModel trong GroupSchema, mã ứng dụng hoạt động trở lại.
Tại sao Javascript bắt đầu nghĩ findOne() là một phương thức thể hiện có bổ sung câu lệnh require?
./user.js là nơi UserModel được xác định. Không có yêu cầu ở đó. Tôi không hiểu câu trả lời của bạn - var UserModel = mongoose.model ('UserModel') - không thành công vì nó không biết Schema là gì (được định nghĩa trong user.js). – Greg
xóa yêu cầu và thay đổi UserModel.findOne() thành mongoose.model ('UserModel'). FindOne() – Greg
Bạn đã xác định 'UserModel' trong' './User''? Smth như 'module.exports = mongoose.model ('UserModel', UserSchema);'? Nếu bạn có, thì 'mongoose.model (' UserModel ') 'sẽ hoạt động tốt. Đối với looping yêu cầu, tôi không shure rằng trường hợp của bạn, nhưng nó trông giống như. –