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)