sql >> Base de Datos >  >> NoSQL >> MongoDB

Refactorización de código de middleware del proyecto NodeJS, usando rutas, controladores y modelos

Hay 2 cosas que, cuando se usan en combinación, harán que el código sea mucho más agradable:

  • Collection.find devuelve una Promesa .
  • Para esperar a que se resuelva una Promesa en Javascript moderno, use await

Puedes usar el siguiente 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
  }
});

O bien, para recuperar los resultados en paralelo en lugar de en serie, 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
  }
});

Puede usar el mismo tipo de patrón cada vez que tenga que realizar varias llamadas asincrónicas, sin necesidad de anidar ni sangrar feos corchetes.