MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Refactorisation du code middleware du projet NodeJS, à l'aide de routes, de contrôleurs et de modèles

Il y a 2 choses qui, lorsqu'elles sont utilisées en combinaison, rendront le code beaucoup plus agréable :

  • Collection.find renvoie une Promise .
  • Pour attendre qu'une promesse soit résolue en Javascript moderne, utilisez await

Vous pouvez utiliser le code suivant :

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, pour récupérer les résultats en parallèle plutôt qu'en série, utilisez 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
  }
});

Vous pouvez utiliser le même type de modèle chaque fois que vous avez plusieurs appels asynchrones à effectuer - pas besoin d'imbrication et d'indentation de crochets laids.