2017-03-16 38 views
0

有人可以幫我弄清楚如何在我的控制器上使用我的sequelize實例方法嗎?如何在續集上使用實例方法

,我寫我的模型那樣:

const bcrypt = require('bcryptjs'); 

module.exports = (sequelize, Sequelize) => { 
    const Patient = sequelize.define('Patient', { 
    email: { 
     type: Sequelize.STRING, 
     allowNull: false, 
    }, 
    password : { 
     type: Sequelize.STRING, 
     allowNull: false, 
    }, 
    }, { 
    classMethods: { 
     associate: (models) => { 
     // associations can be defined here 
     } 
    }, 
    instanceMethods: { 
     generateHash: function (password) { 
        return bcrypt.hash(password, 8, function(err, hash){ 
         if(err){ 
          console.log('error'+err) 
         }else{ 
          return hash; 
         } 
        }); 
       }, 
     validPassword: function(password) { 
      return bcrypt.compareSync(password, this.password); 
     }   
    } 
    }); 
    return Patient; 
}; 

但是當我啓動它我的控制器上,我像

const jwt = require('jsonwebtoken'); 
const passport = require('passport'); 
const Patient = require('../models').Patient; 

module.exports = { 
/// 
    create(req, res) { 
    return Patient 
     .create({ 
     email: req.body.email, 
     password: Patient.prototype.generateHash(req.body.password) 
     }) 
     .then(patient => res.status(201).send(patient)) 
     .catch(error => res.status(400).send(error)); 
    }, 
}; 

我得到這個錯誤的請求提出:

TypeError: Cannot read property 'generateHash' of undefined

回答

0

首先,您應該使用bcrypt.hashSync(),因爲您要將異步函數調用分配給第e password - 它不起作用。

generateHash: function(password){ 
    try { 
     return bcrypt.hashSync(password, 8); 
    } catch (e) { 
     console.log('error: ' + e); 
    } 
} 

爲了使用實例方法,你應該做的

Patient.build().generateHash(req.body.password); 

build()創建模型的新實例,那麼你可以運行的實例方法。或者你可以聲明generateHash作爲一個類的方法,所以你可以這樣運行它

Patient.generateHash(req.body.password); 
+0

它的工作原理!感謝你的回答 :) –

相關問題