Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Problemas na exibição da mensagem de erro de validação

A mensagem que lista os erros de validação não funciona, nesse caso está sendo exibida a mensagem de Erro de Requisição ao invés de Erro de Validação quando não é colocado o título do livro ou da editora, meu código abaixo:

import RequisicaoIncorreta from "./RequisicaoIncorreta.js";

class ErroValidacao extends RequisicaoIncorreta {
  constructor(erro) {
    const mensagemDeErro = Object.values(erro.errors)
      .map(erro => erro.message)
      .join("; ");

    super(`Os seguintes erros foram encontrados: ${mensagemDeErro}`);
  }
}

export default ErroValidacao;
import ErroBase from "./ErroBase.js";

class RequisicaoIncorreta extends ErroBase {
  constructor() {
    super("Um ou mais dados fornecidos estão incorretos", 400);
  }
}

export default RequisicaoIncorreta;
import mongoose from "mongoose";
import ErroBase from "../error/ErroBase.js";
import RequisicaoIncorreta from "../error/RequisicaoIncorreta.js";
import ErroValidacao from "../error/erroValidacao.js";

// eslint-disable-next-line no-unused-vars
function manipuladorDeErros(erro, req, res, next) {    
  if(erro instanceof mongoose.Error.CastError) {
    new RequisicaoIncorreta().enviarResposta(res);
  } else if(erro instanceof mongoose.Error.ValidationError) {
    new ErroValidacao(erro).enviarResposta(res);
  } else {
    new ErroBase().enviarResposta(res);
  }
}

export default manipuladorDeErros;
1 resposta
solução!

Olá Thiago! Tudo bem?

Essa situação está acontecendo porque na sua classe RequisicaoIncorreta você esta passando a mensagem em forma de texto, então todas as classes que estenderem ela ficaram com essa mensagem. Então, para ser atribuído a mensagem do ErroValidacao você deve passar essa mensagem como parâmetro. Segue o exemplo:

constructor(mensagem = "Um ou mais dados fornecidos estão incorretos") {

Toda a estrutura do código ficará assim:

import ErroBase from "./ErroBase.js";

class RequisicaoIncorreta extends ErroBase {
  constructor(mensagem = "Um ou mais dados fornecidos estão incorretos") {
    super(mensagem, 400);
  }
}

export default RequisicaoIncorreta;

Com essas alterações, o problema na exibição da mensagem de erro de validação será resolvido, já que você fará a passagem da mensagem como parâmetro, logo, quando você estender essa classe na classe ErroValidacao, a mensagem de erro mostrada será a de validação.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software