2016-07-06 18 views
5

In meinem Modell versuche ich eine statische getUserByToken-Methode. Allerdings, wenn ich es wie in der Dokumentation zu tun, erhalte ichMongoose - this.find() existiert nicht

this.find is not a function 

Mein Code sieht wie folgt aus:

'use strict'; 

const mongoose = require('mongoose'); 
const Schema = mongoose.Schema; 

const schema = new Schema({ 
    mail: { 
     type: String, 
     required: true, 
     validate: { 
      validator: (mail) => { 
       return /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i.test(mail); 
      } 
     } 
    }, 
    birthDate: { 
     type: Date, 
     required: true, 
     max: Date.now, 
     min: new Date('1896-06-30') 
    }, 
    password: { 
     type: String, 
     required: true 
    }, 
    ... 
}); 


schema.statics.getUserByToken = (token, cb) => { 
    return this.find({ examplefield: token }, cb); 
}; 

module.exports.Schema = schema; 

Ich vermute, es nur ein einfacher Fehler ist, aber ich kann nicht kompilieren das Modell und dann fügen Sie dem Schema/Modell die statische Funktion hinzu, da dies beim Starten durch eine Init-Funktion geschieht, die alle Modelle kompiliert.

Jeder kann mir dabei helfen?

Antwort

4

Sie benötigen eine normale Funktionsdeklaration für Ihre statische Funktion zu verwenden, anstatt die Fett-Pfeil-Syntax verwendet, so dass Sie Mongoose die Bedeutung von this innerhalb der Funktion erhalten:

schema.statics.getUserByToken = function(token, cb) { 
    return this.find({ examplefield: token }, cb); 
};