MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Refatorando o código de middleware do projeto NodeJS, usando rotas, controladores e modelos


Existem 2 coisas que, quando usadas em combinação, tornarão o código muito mais agradável:
  • Collection.find retorna uma Promessa .
  • Para esperar que uma Promise seja resolvida em Javascript moderno, use await

Você pode usar o seguinte código:
const Person= require('./models/person')
const Mortician = require('./models/mortician')
router.get('/', async (req, res, next) => {
  try {
    const persons = await Person.find({ pickedUp: false });
    const morticians = await Mortician.find({});
    res.render('pages/dashboard', {
      title: 'Dashboard',
      persons,
      morticians,
    });
  } catch(e) {
    // handle errors
  }
});

Ou, para recuperar os resultados em paralelo em vez de serial, use Promise.all :
router.get('/', async (req, res, next) => {
  try {
    const [persons, morticians] = await Promise.all([
      Person.find({ pickedUp: false }),
      Mortician.find({})
    ]);
    res.render('pages/dashboard', {
      title: 'Dashboard',
      persons,
      morticians,
    });
  } catch(e) {
    // handle errors
  }
});

Você pode usar o mesmo tipo de padrão sempre que tiver várias chamadas assíncronas para fazer - não há necessidade de aninhamento e recuo de colchetes feios.