Ok, først bruger du mongoose
ret?
User
er din mongoose model, som reagerer på metoder såsom findOne(query)
, findOneAndUpdate(query, update, opts)
osv..
Efter at have kaldt en af disse metoder, kald metoden exec()
som returnerer en forespørgsel.
En forespørgsel er ikke ligefrem et løfte, og du skal angive, hvilke løfter Mongo vil bruge. Her vil jeg anbefale at bruge de oprindelige, så tilføj denne linje ved dit projekt:
const mongoose = require('mongoose')
mongoose.Promise = Promise
Nu giver denne instruktion dig et løfte, dejligt!
User.findOne(q).exec()
Du kan nu oprette en Promise-kæde med din logik, for eksempel:
return User
.findOne(_id)
.exec()
.then((user) => {
return Receipt
.findOne({ bookName: user.bookName })
.exec()
})
.then((receipt) => {
// example
return res.status(200).json(receipt)
}))
})
Tip:Jeg vil foreslå at oprette aux-metoder for at gøre koden endnu mere renere:
/** @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)