在Javascript ES6中使用此关键字

时间:2017-06-08 10:47:57

标签: javascript node.js mongoose ecmascript-6

我正在使用 ES6 开发 Node.js应用程序

在保存到 MongoDB 之前,使用bcrypt-nodejs加密和解密密码。

有Schema定义:

import mongoose from 'mongoose'
import bcrypt from 'bcrypt-nodejs'

const Schema = mongoose.Schema

let userSchema = new Schema({
  username: {
    type: String,
    min: 6,
    max: 20,
    unique: true,
    required: true,
    dropDups: true
  },
  password: {
    type: String,
    min: 6,
    max: 20
  }
})

// generate password hash
userSchema.methods.generateHash = password => bcrypt.hashSync(password, bcrypt.genSaltSync(8), null)

// checking if password is valid
userSchema.methods.validPassword = password => bcrypt.compareSync(password, this.password)

export default mongoose.model('User', userSchema)

当我想验证用户密码时,我会调用以下功能:

if (!user.validPassword(req.body.password)) {
          console.error(`Authentication failed. Wroong password for user     '${req.body.username}'`)
        }

然后发生了错误:

events.js:182
      throw er; // Unhandled 'error' event
      ^

TypeError: Cannot read property 'password' of undefined

我认为此问题是由ES6 syntax引起的,this未定义。但我不知道如何解决它。

提前谢谢大家。

0 个答案:

没有答案