Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Model.find() no longer accepts a callback

Então, parece que a função do mongoose na versões posteriores a 7.0.0 não aceita callback no model.find(), alguém sabe como eu posso substituir esta função

6 respostas
solução!

Oi, Luiz, tudo bem?

Exatamente, a partir da versão 7.0.0 (lançada em fevereiro de 2023), os callbacks foram descontinuados nos métodos do Mongoose. Em vez deles, você deve agora utilizar async/await em conjunto com blocos try/catch do JavaScript. Considere o seguinte código que utiliza callback:

app.get('/livros', (req, res) => {
  livros.find((err, livros) => {
    res.status(200).json(livros)
  })
})

Em vez de usar esse código, agora você irá escrever no lugar o seguinte:

app.get('/livros', async (req, res) => {
    try {
        const livrosResultado = await livros.find();
        res.status(200).json(livrosResultado)
    } catch (err) {
        res.status(500).json(err);
    }
})

Na documentação, é possível conferir a nova forma de utilizar os métodos do Mongoose. O Mongoose está permitindo apenas essa forma atualmente, pois o tratamento de erros se torna mais facilitado utilizando async/await, além do código ser mais legível do que utilizando funções callback.

Espero ter ajudado! Bons estudos :)

Muito bom!! Tinha achado esta maneira de reescrever o código também: app.get('/esportes', (req, res) => { esportes.find().then(esportes => res.status(200).json(esportes)) .catch(erro => res.status(500).json({ erro: erro.message })); });

Estou utilizando a model esporte pois estou utilizando a aula de base para fazer minha Aplicação

Oi, Luiz, acabei de corrigir o segundo código que eu tinha mandado para você, pois estava faltando o mais importante, que era o próprio async/await haha

Sim, também é possível utilizar os métodos .then e .catch nos métodos do Mongoose! Entretanto, funções callback ainda são utilizadas nessa forma, e o tratamento de erros não é tão prático quanto utilizar os blocos try/catch em conjunto com async/await.

Bons estudos!

Bom dia galera, identifiquei um ponto no código que o professor Antônio Evaldo reescreveu.

Está sendo passado no retorno em formato de JSON o próprio livro utilizado na busca do método Find(), onde o correto seria a variável no qual aguardou a busca do banco e armazenou a resposta.

try {
        const livrosResultado = await livros.find();
        res.status(200).json(livrosResultado)
    } catch (err) {
        res.status(500).json(err);
    }

Mas muito obrigado, cai nesse erro de versão também e consegui sanar o problema. Abraços!

Oi, Leandro, obrigado por apontar o erro, corrigi novamente o código da minha resposta!

Boa galera, Muito obrigado!!

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