MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Refactoring del codice middleware del progetto NodeJS, utilizzando percorsi, controller e modelli

Ci sono 2 cose che, se usate in combinazione, renderanno il codice molto più piacevole:

  • Collection.find restituisce una Promessa .
  • Per attendere che una Promessa si risolva nel moderno Javascript, usa await

Puoi utilizzare il seguente codice:

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
  }
});

Oppure, per recuperare i risultati in parallelo anziché in seriale, usa 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
  }
});

Puoi utilizzare lo stesso tipo di modello ogni volta che devi effettuare più chiamate asincrone, senza bisogno di brutti annidamenti e rientri tra parentesi.