1
resposta

[Bug] Erro interno do servidor

Coloquei o exato código que é fornecido na plataforma e jogou para o erro interno do servidor quando rodo a requisição GET: http://localhost:3000/livros e http://localhost:3000/livros?ordenacao=titulo:1

static listarLivros = async (req, res, next) => {
    try {
      let { limite = 5, pagina = 1, ordenacao = "_id:-1" } = req.query;

      let [campoOrdenacao, ordem] = ordenacao.spli(":");

      limite = parseInt(limite);
      pagina = parseInt(pagina);
      ordem = parseInt(ordem);

      if (limite > 0 && pagina > 0) {
        const livrosResultado = await livros
          .find()
          .sort({ [campoOrdenacao]: ordem }) //ordem crescente
          .skip((pagina - 1) * limite) //pula 5 livros cada pagina
          .limit(limite)
          .populate("autor")
          .exec();

        res.status(200).json(livrosResultado);
      } else {
        next(new RequisicaoIncorreta());
      }
    } catch (erro) {
      next(erro);
    }
  }; 
  

Assim está o meu manipuladorDeErros.js:

function manipuladorDeErros(erro, req, res, next) {
  console.log(erro);

  //dado que mongoose nao estava esperando
  if (erro instanceof mongoose.Error.CastError) {
    new RequisicaoIncorreta().enviarResposta(res);
  } else if (erro instanceof mongoose.Error.ValidationError) {
    new ErroValidacao(erro).enviarResposta(res);
  } else if (erro instanceof ErroBase) {
    erro.enviarResposta(res);
  } else {
    new ErroBase().enviarResposta(res);
  }
}

Mensagem de erro: { "mensagem": "Erro interno do servidor.", "status": 500 }

1 resposta

Oi Mateus! Tudo bem?

Há um pequeno erro de digitação aqui no seu código, o método correto é split, mas no print o seu código, está usando ordenacao.spli(":"). Então altere o seu código para ordenacao.split(":").

Aqui está um exemplo de como o código deve estar:

static listarLivros = async (req, res, next) => {
    try {
      let { limite = 5, pagina = 1, ordenacao = "_id:-1" } = req.query;

      let [campoOrdenacao, ordem] = ordenacao.split(":");

      limite = parseInt(limite);
      pagina = parseInt(pagina);
      ordem = parseInt(ordem);

      if (limite > 0 && pagina > 0) {
        const livrosResultado = await livros
          .find()
          .sort({ [campoOrdenacao]: ordem })
          .skip((pagina - 1) * limite)
          .limit(limite)
          .populate("autor")
          .exec();

        res.status(200).json(livrosResultado);
      } else {
        next(new RequisicaoIncorreta());
      }
    } catch (erro) {
      next(erro);
    }
};

Espero que essas dicas ajudem a resolver o problema!

Bons estudos!

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