我有一个SequelizeInstance对象,当我将其更改为JSON时,我需要省略一些值,但每当我调用 delete 时,它也会从SequelizeInstance中删除该值。以下是代码:
instanceMethods: {
toJSON: function() {
var values = this.get();
delete values.password;
delete values.salt;
return values;
}
}
我面临的问题是每当我调用toJSON()时,SequelizeInstance都会删除password和salt的值。我可以做的一个可能的解决方案是做一个对象的浅表副本并返回它。我想知道还有其他更好的方法可以解决这个问题。
答案 0 :(得分:0)
我喜欢做的是创建一个名为.publicData
的方法,就像这样
instanceMethods: {
publicData: function () {
return {
name: this.name,
publicField: this.publicField
// do not add private fields here
}
}
}
它基本上会执行仅包含所需字段的副本。这种方法也很好,因为每次添加新的私有属性时都不必担心更新代码,因为默认情况下它们不会作为公共数据包含在内,您必须手动将其列为白名单,因此我将此方法视为安全措施也是
答案 1 :(得分:0)
这是正确的我试过了两个:
const internalObj1 = model.toJSON()
const internalObj2 = model.get({ plain: true})
如果您更改其中的任何一个,它们都有相同的问题,它们会改变模型引用。
我发现的修复程序深度克隆了它们的值,如下所示: 使用lodash:
const internalObj1 = _.cloneDeep(model.toJSON());
或使用es5:
const internalObj2 = Object.assign({}, model.toJSON());
或使用es6:
const internalObj3 = {...model.toJSON()};
答案 2 :(得分:0)
直接来自后继器issue
password: {
// ...
get() {
return () => this.getDataValue('password');
}
}
作者报价
从user.password返回函数而不是值。优点是明确需要user.password()调用来获取通行证。通行证也将通过普通序列化自动规避