2
respostas

Busca por Id

Ao realizar uma busca por Id inválido, recebemos um retorno de erro, mas se digitar um Id válido porem inexistente, recebemos um retorno vazio. exemplo: Aqui fiz um busca por um Id existente, esta tudo certo Usando um Id que consta no meu banco de dadosAgora irei alterar apenas o último caractere do id, vou mudar de b para a, como esta Id não existe deveria dar uma mensagem de erro, mas não exibe nenhum erro, apenas um retorno vazio. id inexistente no banco de dadosPara finalizar irei remover o último caractere, isso tornara o Id invalido e ira disparar um erro. Insira aqui a descrição dessa imagem para ajudar na acessibilidadeMe parece que da forma como foi feito na aula ele esta validando apenas se o ID é válido e não se ele existe. Como poderíamos implementar para verificar se o Id existe? att. Rafael

2 respostas

Ola Rafael, td blz?

Na documentação do mongoose sobre consultas (https://mongoosejs.com/docs/queries.html), ele nos encaminha para um tutorial externo (https://masteringjs.io/tutorials/mongoose/find-by-id), onde encontramos:

"In Mongoose, the Model.findById() function is used to find one document by its _id. The findById() function takes in a single parameter, the document id. It returns a promise that resolves to the Mongoose document if MongoDB found a document with the given id, or null if no document was found."

Assim, o retorno nulo está correto e deve ser tratado pelo código. O meu ficou assim:

 livros.findById(id)
  .populate('autor', 'nome')
  .exec((err, livros) => {
    if (err) {
      res.status(400).send({ message: `${err.message} - Id do livro não localizado.` });
    } else {
      if (livros == null) {
         res.status(400).send({ message: `${id} - Id do livro não localizado.` });
      } else {
        res.status(200).send(livros);
      }
    }
  })

Att.

Show Uiratan, muito bom, deu certo. Obrigado!