Pytanie w sprawie mongoose, express, node.js, instance, mongodb – Metoda instancji Mongoose jest niezdefiniowana

9

Zdefiniowałem metodę instancji za pomocą Mongoose, aby uwierzytelnić rep (użytkownika):

RepSchema.methods.authenticate = function(password){
  return this.encryptPassword(password) === this.hashed_password;
};

W mojej aplikacji znajduję przedstawiciela i dzwonię doauthenticate metoda na to:

var mongoose = require("mongoose");
var Rep = mongoose.model("Rep");

Rep.findOne({email: email}, function(err, rep){
  if (rep.authenticate(req.body.session.password)){
    req.session.rep_id = rep._id;
    res.redirect('/calls', {});
  }
});

Jednak otrzymuję ten błąd:

TypeError: Object { email: '[email protected]',
  password: XXXXXXXXX,
  name: 'meltz',
  _id: 4fbc6fcb2777fa0272000003,
  created_at: Wed, 23 May 2012 05:04:11 GMT,
  confirmed: false,
  company_head: false } has no method 'authenticate'

Co ja robię źle?

@JohnnyHK poprawny user730569
@JohnnyHK nie jest pewien, jaki odpowiedni kod pominę user730569
@JohnnyHK, nawet jeśli utworzę instancję świeżego obiektu przezrep = new Rep(); rzuca ten sam błąd, gdy dzwonięauthenticate na tym user730569

Twoja odpowiedź

1   odpowiedź
16

co robię źle. Kod źródłowy mongoose stosuje wszystkie zdefiniowane metody wewnątrzschema.methods do prototypu modelu w punkcie, w którym schemat modelu jest ustawiony na nazwę modelu (mongoose.model("modelname", modelSchema)). Dlatego musisz zdefiniować wszystkie metody, które dodają te metody do obiektu metody instancji Schema, zanim ustawisz model na jego nazwę. Ustawiałem model przed zdefiniowaniem metod. Problem rozwiązany.

Powiązane pytania