1

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

我将不胜感激任何帮助或指向使用实例方法的完全完整的猫鼬模式定义的链接。

4

2 回答 2

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);
    }
});
于 2013-03-16T13:59:54.270 回答
0

您对模型使用静态方法,但对实例(文档)不使用:

帐户架构。静态.login = 函数(电子邮件、密码、回调){ ...

但正在尝试调用例如(doc)方法:

doc .addFunds

你应该像这样调用模型:

AccountSchema.addFunds(...);
于 2020-03-30T10:13:11.987 回答