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

Falha na programação?

Eu segui os passos e consegui executar os códigos com sucesso, no entanto, ao testar o listarLivroPorID, com um ID de mesmo tamanho, mas diferente dos que existem, ele não me retorna mensagem de erro, mas um objeto em branco. Isto seria uma falha da programação? Existe uma forma de retornar o erro de forma correta? Seguem imagens exemplificando:

  • Caso de sucesso:

Imagem da tela do postman com a requisição GET com o ID correto e com o retorno de sucesso

  • Caso de erro retirando um caracter do ID: Imagem da tela do postman com a requisição GET com o ID incorreto, com um caracter a menos e com o retorno de erro
  • Caso de erro com o ultimo caracter trocado (troquei o 8 pelo 7):

Imagem da tela do postman com a requisição GET com o ID incorreto, com um caracter trocado e com o retorno que deveria ser de erro, em branco

1 resposta
solução!

Olá Gustavo, tudo bem?

No exemplo do projeto, quando retiramos um ou dois caracteres do id, como você fez, a função findById identifica que o código informado não é um ObjectId, portanto cai no if referente ao erro e mostra a mensagem com o status 400, conforme implementado.

Como no else estamos enviando o status 200, realmente ele não faz a segunda verificação para ver se é um id válido porém não existente.

Para que contemple ambas as situações, pode fazer uma alteração no código conforme abaixo:


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

    livros
      .findById(id)
      .populate("autor", "nome")
      .exec((err, livros) => {
        if (err) {
          res.status(400).send({ message: `${err.message} - Id informado está fora do padrão.` });
        } else if (livros == null) {
          res.status(404).send('Id do livro não encontrado na base de dados');
        } else {
          res.status(200).send(livros);
        }
      });
  };

Se a dúvida ainda persistir, não deixe de nos avisar por aqui.

Bons estudos! 😄

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