我在架构上定义了一个我似乎无法访问的实例方法。在我详细介绍之前,我会说我已经阅读了[这个问题](Mongoose instance method is undefined),它有同样的问题,但我的根本原因必须是不同的。在将模型连接到其名称之前,我定义了所有实例方法。
首先我定义了一个模式,然后定义了一个实例方法: AccountSchema.methods.addFunds = function(amountToAd,callback){ //做一些事情来增加资金 return callback(); }
在该文件的底部,我将名称与架构相关联: var exports = module.exports = Account = mongoose.model('Account',AccountSchema);
对于记录,在关联模式和名称之前,我检查以确保AccountSchema.methods具有我的实例方法。
稍后,我使用Account.findOne来获取帐户的实例:
AccountSchema.statics.login = function( email, password, callback) {
Account.findOne({ email:email}, function( err, doc){
if(err) {
console.log(err, null);
}
// below is just some stuff to see if the doc is associated to the schema
if(doc) {
var keys = Object.keys(doc.schema);
for(var propertyName in doc.schema) {
console.log(propertyName + ": " + doc[propertyName]);
}
// blah, do some other stuff
callback(doc);
}
}
我包含上面的代码段,因为它看起来像我从我的数据库中获取帐户时,它不再有任何实例方法。
最后,当我尝试调用doc.addFunds时,我得到:
TypeError: Object #<Object> has no method 'addFunds'
我很感激任何帮助或指向使用实例方法的完整mongoose模式定义的链接。
答案 0 :(得分:0)
应该是这样吗?
AccountSchema.statics.login = function( email, password, callback) {
Account.findOne({ email:email}, function( err, doc){
if(err) {
console.log(err, null);
}
if(doc) {
var keys = Object.keys(doc.schema);
for(var key in keys) {
console.log(key + ": " + doc.schema[key]); // I changed doc[key] to doc.schema[key]
}
}
callback(doc);
}
});
答案 1 :(得分:0)
您对MODEL使用静态方法,但对INSTANCE(doc)不使用静态方法:
AccountSchema。静态。登录=函数(电子邮件,密码,回叫){...
但是正在尝试调用实例(doc)方法:
doc .addFunds
您应该像这样调用模型:
AccountSchema.addFunds(...);