Bookshelfjs + bcrypt hashPassword 正在创建而不是更新

Bookshelfjs + bcrypt hashPassword is working on create but not on update

我在 bookshelfjs 中使用 bcrypt 散列密码,当我在注册时进行插入查询时它工作正常,但是当我尝试更新密码时它没有散列密码。

model.js

var Bookshelf = require('../../db').bookshelf;
var bcrypt = require('bcrypt');
var Promise  = require('bluebird');

// Provider model
var User = Bookshelf.Model.extend({
    tableName: 'user_table',
    initialize: function() {
        this.on('creating', this.hashPassword, this);
    },
    hashPassword: function(model, attrs, options) {
        return new Promise(function(resolve, reject) {
            bcrypt.hash(model.attributes.password, 10, function(err, hash) {
                if( err ) reject(err);
                model.set('password', hash);
                resolve(hash); // data is created only after this occurs
            });
        });
    }
});
var Users =  Bookshelf.Collection.extend({
    model: User
});

module.exports = {
    User: User,
    Users: Users
};

service.js

var updateUser = function (object ,whereId, callback) {
    Model.User.forge({id: whereId})
        .fetch({require: true})
        .then(function (user) {
            user.save(object)
                .then(function () {
                    console.log(user);
                    return callback(null, user);
                })
                .catch(function (err) {
                    return callback(err, null);
                });
        })
        .catch(function (err) {
            return callback(err, null);
        });
};

var createUser = function (reqObject, callback) {
    Model.User.forge(reqObject)
        .save()
        .then(function (user) {
            return callback(null, user);
        })
        .catch(function (err) {
            return callback(err, null);
        });
};

关于更新数据是:

var dataToBeUpdated = {
                            password : req.body.password
                        };

将模型中的 'creating' 替换为 'saving' 即可

var User = Bookshelf.Model.extend({
    tableName: 'user_table',
    initialize: function() {
        this.on('saving', this.hashPassword, this);
    },
    hashPassword: function(model, attrs, options) {
        return new Promise(function(resolve, reject) {
            bcrypt.hash(model.attributes.password, 10, function(err, hash) {
                if( err ) reject(err);
                model.set('password', hash);
                resolve(hash); // data is created only after this occurs
            });
        });
    }
});

来源:http://wesleytsai.io/2015/07/28/bookshelf-bcrpyt-password-hashing/