2017-08-12 55 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