sql >> Database >  >> NoSQL >> MongoDB

Beloftes gebruiken in mangoestroutes

Ok, eerst gebruik je mongoose Rechtsaf?

User is uw mangoestmodel dat reageert op methoden zoals findOne(query) , findOneAndUpdate(query, update, opts) enz..

Na het aanroepen van een van deze methoden, roept u de methode exec() . aan die een Query retourneert.

Een query is niet bepaald een belofte en u moet specificeren welke beloften Mongo zal gebruiken. Hier zou ik aanraden om de native te gebruiken, dus voeg deze regel toe aan je project:

 const mongoose = require('mongoose')
 mongoose.Promise = Promise

Nu, deze instructie geeft je een belofte, leuk!

User.findOne(q).exec()

U kunt nu een Promise-keten maken met uw logica, bijvoorbeeld:

 return User
     .findOne(_id)
     .exec()
     .then((user) => {
       return Receipt
         .findOne({ bookName: user.bookName })
         .exec()
       })
     .then((receipt) => {
            // example
            return res.status(200).json(receipt)
         }))
     })

Tip:ik stel voor om aux-methoden te maken om de code nog schoner te maken:

/** @return {Promise} */
function findUser(id) {
  return User.findOne(id).exec()
}

/** @return {Promise} */
function findReceipt(bookName) {
  return Receipt.findOne({ bookName }).exec()
}

// example
function f(req, res) {
  const userId = req.get('id')

  return findUser(userId)
    .then((user) => findReceipt(user.bookName))
    .then((receipt) => res.status(200).json(receipt))
    .catch((err) => res.status(500).json(null))
}

// register your handler
app.get('/book', f)



  1. Mongodb met lamp installeren op Ubuntu (Linux)

  2. azure-functie (knooppunt) die mongodb aanroept, wordt zonder fouten voltooid, maar er komt niets terug uit de query

  3. Zoek en sorteer de buitenlandse collectie

  4. Demeteorizer met node-webkit