2016-12-26 4 views
0

Я добавил крючок, чтобы получить экземпляр модели пользователя для шифрования паролей пользователей. Но им не удалось получить экземпляр модели.Тип Ошибка при получении экземпляра модели

Это мой код

regUsers.pre('save',(next)=>{ 
     // get access to this user model 
     const user = this; 

     // generate salt the run call back 
     bcrypt.genSalt(10,(err,salt)=>{ 

     if(err){ return next(err);} 

     // hash(encrypt) our password using salt 
     bcrypt.hash(user.password,salt,null,(err,hash)=>{ 

       if(err){ return next(err);} 

       //overwrite plain text password with encrypted password 
       user.password = hash; 

       next(); 
     }); 
     }) 
}); 

Im получаю ошибку типа, как TypeError: Не удается прочитать свойство 'пароль' неопределенных. Любая причина, почему я получаю этот erorr? и как преодолеть это?

+1

'this' будет ссылаться на экземпляр' mongoose.Query' .. –

+0

@SunilBN в этом случае используется «промежуточное программное обеспечение документа», это означает ссылку на обновляемый документ, а не на запрос , Здесь объясняется: http://mongoosejs.com/docs/middleware.html –

+0

Возможный дубликат [Mongoose pre/post midleware не может получить экземпляр \ [this \] с использованием ES6] (http://stackoverflow.com/questions/36957440/мангуст-пра-пост-косяк-связующий программное обеспечение-Acces-это-экземпляр с помощью-ES6) –

ответ

1

Это потому, что вы используете arrow function, попробуйте классическое выражение функции.

Возможно, Mongoose вызывает этот обратный вызов, используя call() или apply() (или что-то подобное), чтобы дать ему желаемый контекст (в данном случае ссылку на обновляемый документ).

Смежные вопросы