2
respostas

Tratamento de dados antes de enviar ao db

Estou com a mesma dificuldade do thiago.

Existe alguma forma que eu consiga alterar os dados antes de chegar ao banco de dados igual é feito em validação por exemplo.

no meu casso eu gostaria de poder criptografar o dado antes de enviar para o banco de dados em uma criptografia própria minha.

sei que poderia fazer isso pegando as informações direto do req e alterar. mas existe alguma função do sequelize direcionado apenas aquele campo que quero?

2 respostas

Já encontrei a solução:

const User = sequelize.define('User', {
...
    password: {
        type: DataTypes.STRING,
        allowNull: false,
    }
...
});

function generateHash(user) {
    if (user === null) {
        throw new Error('No found employee');
    }
    else if (!user.changed('password')) return user.password;
    else {
        let salt = bcrypt.genSaltSync();
        return user.password = bcrypt.hashSync(user.password, salt);
    }
}

User.beforeCreate(generateHash);

User.beforeUpdate(generateHash);

Oi Rafael, tudo bem? Teria sido bom colocar o link do post do Thiago aqui pra gente ter um contexto melhor e poder ajudar ele também de forma mais direta já que os problemas estão relacionados. Você chegou a mandar sua solução no tópico dele? Se for o mesmo caso, ajudaria ele também.

Um comentário sobre o código em si é que você não precisa do último else, já que nos outros casos você já dá return ou lança um erro.