3
respostas

Não retorna erro ao digitar um ID inexistente

Por que não retorna nenhum erro e ainda retorna a mensagem de livro removido com sucesso?

 static deletarLivro = (req, res) => {
       const id = req.params.id

       livros.findByIdAndDelete(id, (err) => {
        if(!err) {
            res.status(200).send({message: `Livro ${id} removido com sucesso`})
        } else if (id == null) {
            res.status(500).send({message: 'Livro não removido'})
        } else { 
            res.status(404).send({message: `Id ${id} não encontrado`})
        }
       })
    }
3 respostas

Olá, o código não está verificando se existe o ID informado e o retorno da função "findByIdAndDelete" será vazio "{}" caso não encontre o ID. Como vazio não é erro, é apresentada a resposta 'Livro ${id} removido com sucesso'. Segue abaixo código para teste:

static deletarLivro = (req, res) => {
       const id = req.params.id
       livros.findByIdAndDelete(id, (err, livroDeletado) => {
            if (err) {
                res.status(500).send({message: 'Erro Livro não removido'})
            } else if (!livroDeletado) { 
                res.status(404).send({message: `Livro de Id ${id} não encontrado`})
            } else {
                res.status(200).send({message: `Livro ${id} removido com sucesso`})        
            }
       })
    }

Obrigado Sandro, assim funcionou mesmo! Você poderia me explicar melhor sobre esse segundo parâmetro livroDeletado?

Boa! O método "findByIdAndDelete" encontra um documento correspondente, remove-o, passando o documento encontrado (se houver) para o retorno da chamada (Callback), esse retorno é o livroDeletado.

Segue link da documentação: Docs findByIdAndDelete