续集:创建时不返回密码



当我使用 Sequelize 创建用户的新实例时,我从数据库中返回的完整对象作为对 Create 的响应。我正在尝试阻止 Sequelize 在创建时返回存储在我的用户表中的哈希密码。

exports.create = (payload, err, success) => {
db.user.create(payload).then(success).catch(err);
console.log('Created new user record.');
};

我尝试使用 exclude 属性,但返回了完整的对象。

exports.create = (payload, err, success) => {
db.user.create(payload, {
attributes: {
exclude: ['password']
}
}).then(success).catch(err);
console.log('Created new user record.');
};

我能够在我的 find 和 findAll 路由的属性中使用 exclude 属性,如下例所示,但我无法让它与我的创建一起使用。

exports.find = (payload, err, success) => {
db.user.find({
where: {
id: payload.id,
},
attributes: {
exclude: ['password']
}
}).then(success).catch(err);
console.log('Retrieved user record with id: ' + payload.id);
};

您可以尝试使用 toJSON 实例方法来排除属性:

型:

instanceMethods: {
toJSON: function () {
const userObj = Object.assign({}, this.dataValues);
delete userObj.password;
return userObj
}
}

路由文件:

user.create(request.body, (err) => {
res.status(500).json(err);
console.log('Error creating new user.');
}, (data) => {
res.status(200).json(data.toJSON());
console.log('User created.'); 
});

在模型上使用 Getter 并返回未定义

password: {
type: DataTypes.STRING,
get() {
return undefined;
}
}

最新更新