redis - 这段代码创建的数据带有原型链上的方法,应该怎么改?
本文介绍了redis - 这段代码创建的数据带有原型链上的方法,应该怎么改?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
const redis = require('redis');
const bcrypt = require('bcrypt');
const db = redis.createClient();
function User(obj) {
for (let key in obj) {
this[key] = obj[key]
}
}
User.prototype.save = function (fn) {
if (this.id) {
this.update(fn);
} else {
let user = this;
db.incr('user:ids', function (err, id) {
if (err) {
return fn(err);
}
user.id = id;
user.hashPassword(function (err) {
if (err) {
return fn(err);
}
user.update(fn);
})
})
}
};
User.prototype.update = function (fn) {
let user = this;
let id = user.id;
db.set('user:id:' + user.name, id, function (err) {
if (err) {
return fn(err);
}
db.hmset('user:' + id, user, function (err) {
fn(err);
});
});
};
User.prototype.hashPassword = function (fn) {
let user = this;
bcrypt.genSalt(12, function (err, salt) {
if (err) {
return fn(err);
}
user.salt = salt;
bcrypt.hash(user.pass, salt, function (err, hash) {
if (err) {
return fn(err);
}
user.pass = hash;
fn();
});
});
};
解决方案
JSON.parse(JSON.stringify(data))
即可去除数据中的函数属性(别小看它!速度很快!)。
这篇关于redis - 这段代码创建的数据带有原型链上的方法,应该怎么改?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文