jetsai
jetsai

Reputation: 105

Cannot set property 'functionName' of undefined

I am learning MEVN by watching this video https://youtu.be/H6hM_5ilhqw?t=38m28s

And I imitated to add a function to const User like below:

module.exports = (sequelize, Datatypes) =>{
  const User = sequelize.define('User', {
    email:{
      type:Datatypes.STRING,
      unique: true
    },
    password:Datatypes.STRING
  }, {
    hooks:{
      beforeCreate: hashPassword,
      beforeUpdate: hashPassword,
      beforeSave: hashPassword
    }
  })

  User.prototype.comparePassword = function(password) {
    return bcrypt.compareAsync(password, this.password)
  } 

  return User
}

But it always shows that TypeError: Cannot set property 'comparePassword' of undefined

(The tutorial video has no problem with it.)

here is the error

I have tried to use "User.____proto____.comparePassword", and it was compiled successfully but cannot pass the function to its instance.

Hope someone can help me out, thanks!

Upvotes: 2

Views: 629

Answers (1)

Wiktor Zychla
Wiktor Zychla

Reputation: 48240

You are using an older version of sequelize that doesn't yet support extending instances by using prototypes.

According to their documentation the older way would be to provide instanceMethods

const Model = sequelize.define('Model', {
    ...
}, {
    classMethods: {
        associate: function (model) {...}
    },
    instanceMethods: {
        someMethod: function () { ...}
    }
});

The 4.X works like you tried to make it to work.

Upvotes: 1

Related Questions