sql >> Databasteknik >  >> NoSQL >> MongoDB

Refaktorering av middleware-kod för NodeJS-projektet, med hjälp av rutter, kontroller och modeller

Det finns två saker som, när de används i kombination, kommer att göra koden mycket snyggare:

  • Collection.find returnerar ett löfte .
  • För att vänta på att ett löfte ska lösas i modernt Javascript, använd await

Du kan använda följande kod:

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

Eller, för att hämta resultaten parallellt snarare än i seriell, använd 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
  }
});

Du kan använda samma sorts mönster när du har flera asynkrona anrop att göra - inget behov av fula fäste och indrag.




  1. Varför kräver MongoDB `unique:true` för att skapa en samling?

  2. Node + Mongodb + sortera kapslad array

  3. MongoDB hittar på alla egenskaper hos dokument

  4. Behöver lagra hög precision decimalvärden i MongoDB