Я не могу понять, почему это ключевое слово в приведенном ниже коде указывает на глобальный объект, поскольку я использую стрелочную функцию в .then. Я думал, что это будет указывать на объект пользователя:
приведенная ниже функция находится в моем пользовательском контроллере:
exports.register = function(req, res) {
let user = new User(req.body)
user.register().then(()=> {
//this is pointing to global object not user object
console.log(this)
req.session.user ={username: user.data.username}
req.session.save(()=>res.redirect('/'))
})
.catch((regErrors)=>{
console.log(regErrors)
regErrors.forEach((e)=>{
req.flash('regErrors',e)
})
req.session.save(()=>res.redirect('/'))
})
}
код метода регистрации:
User.prototype.register = function(){
return new Promise(async (resolve,reject) =>{
// Validate user data
this.cleanUp()
await this.validate()
// save the user data into a database if errors array is empty
if (!this.errors.length) {
// hash user password
let salt = bcrypt.genSaltSync(10)
this.data.password = bcrypt.hashSync(this.data.password, salt)
usersCollection.insertOne(this.data)
resolve()
}
else {
reject(this.errors)
}
})