sql >> Databasteknik >  >> NoSQL >> MongoDB

Använda löften i Mongoose Routes

Ok, först använder du mongoose höger?

User är din mangustmodell som svarar på metoder som findOne(query) , findOneAndUpdate(query, update, opts) osv.

Efter att ha anropat någon av dessa metoder, anropa metoden exec() som returnerar en fråga.

En fråga är inte precis ett löfte och du måste ange vilka löften som Mongo ska använda. Här skulle jag rekommendera att använda de infödda, så lägg till den här raden i ditt projekt:

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

Nu, den här instruktionen ger dig ett löfte, trevligt!

User.findOne(q).exec()

Du kan nu skapa en löfteskedja med din logik, till exempel:

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

Tips:Jag skulle föreslå att du skapar aux-metoder för att göra koden ännu renare:

/** @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. Redigo ScanStruct-fel med time.Time

  2. Moongoose sammanlagda $match matchar inte id:n

  3. Formatera ett tal som en procentandel i SQL

  4. Steg för att installera MongoDB på Amazon Linux