2017-08-12 115 views
0

当我使用Sequelize创建用户的新实例时,我从数据库中获取完整对象作为对Create的响应。我试图阻止Sequelize在创建时返回存储在我的用户表中的散列密码。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.'); 
}; 

我可以使用排除财产对我的发现和路线的findAll像下面的例子属性,但我一直没能得到它与我的创建工作。

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); 
}; 
+0

的[Sequelize可能重复:不回密码](https://stackoverflow.com/questions/27972271/sequelize-dont-return-password) – mscheker

回答

1

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

添加到我的用户模型创建时,返回的对象与密码相同。或者我会将它添加到其他地方?也许sequelize.define? – Wheezykw

+0

@Wheezykw你是否从你的用户实例调用了toJSON方法? 'user.toJSON();' –

+0

我在模型中添加了instanceMethods到User实例。在我的快速路线中,我执行以下操作: 'user.create(request.body,(err)=> {res.status(500).json(err); console.log('创建新用户时出错') },(data)=> { res.status(200).json(data); console.log('User created。') });' – Wheezykw