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
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
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!!