Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

[NodeJS + MySQL] Erro com uma req/validacao de um campo

Estou tentando fazer com que quando um novo cadastro seja solicitado, verifique se o e-mail digitado ja exista no banco de dados. Porém não consigo ter esse retorno de jeito nenhum. Já, no getter eu consigo ter o retorno corretamente.

Segue os codes!

Método estatico no modelo de usuario

   static async buscaPorEmail(email) {
      const usuarios = UsuarioDao.getUserForEmail(email);
      usuarios.then(usuario => {
         if (!usuario.length > 0) {
            return new Usuario(usuario);
         } else {
            console.log('este e-mail ja esta em uso');
         }
      });

O DAO com o mysql

   getUserForEmail(email) {
      return new Promise((resolve, reject) => {
         const qry = `SELECT * FROM tbl_usuarios WHERE email=${email}`

         conexao.query(qry, (error, usuario) => {
            if (error) {
               return  reject('Não foi possível encontrar o usuário!');
            }
            return resolve(usuario);
         });
      });
   }

O método adiciona do Controller

   async adiciona(req, res) {
      const { nome, email, senha } = req.body
      try {

         const usuario = new Usuario({ nome, email, senha });
         await usuario.adiciona();
         res.status(201).json();

      } catch (error) {
         if (error instanceof InvalidArgumentError) {
            res.status(422).json({ error: error.msg });
         } else if (error instanceof InternalServerError) {
            res.status(500).json({ error: error.msg });
         } else {
            res.status(500).json({ error: 'ERRO CONTROLLER' });
         }
      }
   }

O método adiciona do Modelo de Usuario

   async adiciona() {
      if (await Usuario.buscaPorEmail(this.email)) {
         throw new Error('erro no modelo add')
      }else {
         console.log('Cadastro OK');
      }
      /* return UsuarioDao.setUsuario(this); */
   }
6 respostas

Ja testei das seguintes forma stambém e não deu certo. Return com false/true e com null

   static async buscaPorEmail(email) {
      const usuarios = UsuarioDao.getUserForEmail(email);
    if(!usuarios) {
        return null;
    }

    return new Usuario(usuario);
      });
   }

Oi Antônio, a primeira coisa que me pergunto é por que existe um return para o reject e o resolve, são callbacks, não precisam do return. Me conta o que está acontecendo com mais detalhes pra que eu possa te ajudar da melhor forma. Ah, se puder, me disponibiliza seu projeto para que eu investigue o que pode ser mais de perto, por favor...

Oi Wands! Então, eu faço uma consulta no banco de dados quando o formulário é enviado. Verifico se o e-mail digitado já existe no banco de dados Caso exista, ele lança um erro dizendo que não é possível realizar o cadastro pois o e-mail já está sendo usado.

Postei no github pra vc poder ver melhor https://github.com/dkdevxD/-didactic_activities/tree/master/backend

solução!

Ja resolvi! Tmj

Opa, conta pra gente como resolveu?

1 - Erro de sintaxe na query do MySQL. Tive que envolver o paramentro email entre ('') = '${email}'

2 - Tratar corretamente o retorno do método getUserForEmail()