2016-07-06 3 views
5

в моей модели, я пытаюсь сделать статический метод getUserByToken. Однако, если я делаю это, как в документации, я получаюMongoose - this.find() не существует

this.find is not a function 

Мой код выглядит следующим образом:

'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; 

Я предполагаю, что это простая ошибка, однако, я не могу скомпилировать и добавьте статическую функцию в схему/модель, поскольку это выполняется через функцию init при запуске, которая компилирует все модели.

Кто-нибудь может мне помочь?

ответ

4

Вы должны использовать обычную декларацию функции для статической функции вместо того, чтобы использовать синтаксис жира со стрелкой так, что вы сохраняете значение Mongoose по this в функции:

schema.statics.getUserByToken = function(token, cb) { 
    return this.find({ examplefield: token }, cb); 
}; 
Смежные вопросы