Ok, d'abord utilisez-vous mongoose
droit?
User
est votre modèle de mangouste qui répond à des méthodes telles que findOne(query)
, findOneAndUpdate(query, update, opts)
etc..
Après avoir appelé l'une de ces méthodes, appelez la méthode exec()
qui renvoie une requête.
Une requête n'est pas exactement une promesse et vous devrez spécifier quelles promesses Mongo utilisera. Ici, je recommanderais d'utiliser les versions natives, ajoutez donc cette ligne à votre projet :
const mongoose = require('mongoose')
mongoose.Promise = Promise
Maintenant, cette instruction vous rend une promesse, sympa !
User.findOne(q).exec()
Vous pouvez maintenant créer une chaîne Promise avec votre logique, par exemple :
return User
.findOne(_id)
.exec()
.then((user) => {
return Receipt
.findOne({ bookName: user.bookName })
.exec()
})
.then((receipt) => {
// example
return res.status(200).json(receipt)
}))
})
Astuce :Je suggérerais de créer des méthodes auxiliaires afin de rendre le code encore plus propre :
/** @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)