2016-07-06 45 views
5

all'interno del mio modello, sto cercando di eseguire un metodo statico getUserByToken. Tuttavia, se lo faccio come nella documentazione, io sono sempreMongoose - this.find() non esiste

this.find is not a function 

Il mio codice è simile al seguente:

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

Sto indovinando si tratta solo di un semplice errore, però, non riesco a compilare il modello e aggiungere la funzione statica allo schema/modello poiché ciò avviene tramite una funzione init all'avvio, che compila tutti i modelli.

Chiunque può aiutarmi?

risposta

4

è necessario utilizzare una dichiarazione di funzione normale per la funzione statica invece di utilizzare la sintassi grasso freccia in modo da conservare il significato di Mongoose del this all'interno della funzione:

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