Sequelize:不要在Create上返回密码

时间:2017-08-12 22:55:40

标签: node.js sequelize.js

当我使用Sequelize创建User的新实例时,我从数据库返回完整对象作为对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);
};

2 个答案:

答案 0 :(得分:2)

您可以尝试使用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.'); 
});

答案 1 :(得分:0)

在模型上使用 Getter 并返回 undefined

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