sql >> Databáze >  >> NoSQL >> MongoDB

Použití Promises v Mongoose Routes

Dobře, nejprve používáte mongoose že jo?

User je váš model mongoose, který reaguje na metody jako findOne(query) , findOneAndUpdate(query, update, opts) atd..

Po volání kterékoli z těchto metod zavolejte metodu exec() který vrátí dotaz.

Dotaz není přesně slib a budete muset určit, které sliby Mongo použije. Zde bych doporučil použít ty nativní, takže do svého projektu přidejte tento řádek:

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

Nyní vám tato instrukce vrací slib, milé!

User.findOne(q).exec()

Nyní můžete vytvořit řetězec Promise se svou logikou, například:

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

Tip:Navrhoval bych vytvořit aux metody, aby byl kód ještě čistší:

/** @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. 2 způsoby, jak získat velikost dokumentu v MongoDB

  2. syntaxe pro propojení dokumentů v mongodb

  3. mongodb count vs find with count

  4. Co znamená Document-oriented vs. Key-Value, když mluvíme o MongoDB vs Cassandra?