在正确排序方法定义和模式命名之后,未定义mongoose实例方法

时间:2013-03-16 13:33:29

标签: node.js mongoose instance-methods

我在架构上定义了一个我似乎无法访问的实例方法。在我详细介绍之前,我会说我已经阅读了[这个问题](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模式定义的链接。

2 个答案:

答案 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(...);