1

アクセスできないように見えるスキーマでインスタンス メソッドを定義しました。詳細に入る前に、[この質問] ( Mongoose instance method is undefined ) を読みましたが、同じ問題がありましたが、根本的な原因は異なるはずです。モデルをその名前に接続する前に、すべてのインスタンス メソッドを定義しました。

最初にスキーマを定義し、次にインスタンス メソッドを定義しました。}

そのファイルの最後で、名前をスキーマに関連付けます。 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

モデルには静的メソッドを使用しますが、インスタンスには使用しません (ドキュメント):

アカウントスキーマ。statics .login = function(電子メール、パスワード、コールバック) { ...

インスタンス(doc)メソッドを呼び出そうとしています:

doc .addFunds

次のようなモデルを呼び出す必要があります。

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