1
resposta

[Dúvida] Middleware "erro" não retorna o erro em especifico

app.use((erro, req, res, next) => {
    if (erro instanceof mongoose.Error.CastError) {
        res.status(400).send({message: "Um ou mais dados fornecidos estão incorretos."})
    } else { 
        res.status(500).send({message: "Erro interno de servidor."})
    }
});
static buscaLivrosId = async(req, res, next) => {
        try{

            const livrosBuscados = await livrosModel.findById(req.params.id)

            if(livrosBuscados !== null){
                res.status(200).json(livrosBuscados)
            }else{
                res.status(404).send({message: "id do livro não encontrado"})
            }

        }catch( erro ){
            next(erro)
        }
    }
1 resposta

Olá, Eduardo! Parece que você está com dúvidas sobre o Middleware de erro, correto? Vamos lá!

O middleware de erro que você criou está correto e deve funcionar como esperado. Ele será ativado sempre que um erro for passado para a função next(), que é exatamente o que você está fazendo no método buscaLivrosId quando um erro é capturado no bloco catch.

Agora, se você está tendo problemas para ver o erro específico, pode ser porque o erro que está sendo gerado não é uma instância de mongoose.Error.CastError. Se o erro não for dessa classe, o middleware sempre retornará "Erro interno de servidor", como definido no bloco else do seu middleware.

Para ver o erro específico, você pode adicionar um console.log(erro) antes do bloco if no seu middleware. Isso irá imprimir o erro no console sempre que um erro for capturado, o que pode te ajudar a entender melhor o que está acontecendo.

Aqui está um exemplo de como você pode fazer isso:

app.use((erro, req, res, next) => {
    console.log(erro); // imprime o erro no console
    if (erro instanceof mongoose.Error.CastError) {
        res.status(400).send({message: "Um ou mais dados fornecidos estão incorretos."})
    } else { 
        res.status(500).send({message: "Erro interno de servidor."})
    }
});

Espero ter entendido a sua dúvida, e conseguidoi esclarecer. Lembre-se, essa é apenas uma sugestão para depuração e não deve ser usada em um ambiente de produção, pois pode expor informações sensíveis.

Qualquer coisa manda aqui. Bons estudos!

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