ठीक है, पहले आप mongoose
का उपयोग कर रहे हैं सही?
User
आपका नेवला मॉडल है जो findOne(query)
. जैसी विधियों का जवाब देता है , findOneAndUpdate(query, update, opts)
आदि..
इनमें से किसी भी तरीके को कॉल करने के बाद, मेथड को exec()
कॉल करें जो एक क्वेरी देता है।
एक प्रश्न वास्तव में एक वादा नहीं है और आपको यह निर्दिष्ट करना होगा कि मोंगो किस वादे का उपयोग करेगा। यहां मैं देशी लोगों का उपयोग करने की सलाह दूंगा, इसलिए इस लाइन को अपने प्रोजेक्ट में जोड़ें:
const mongoose = require('mongoose')
mongoose.Promise = Promise
अब, यह निर्देश आपको एक वादा लौटा रहा है, अच्छा!
User.findOne(q).exec()
अब आप अपने तर्क के साथ एक वादा श्रृंखला बना सकते हैं, उदाहरण के लिए:
return User
.findOne(_id)
.exec()
.then((user) => {
return Receipt
.findOne({ bookName: user.bookName })
.exec()
})
.then((receipt) => {
// example
return res.status(200).json(receipt)
}))
})
युक्ति:मैं कोड को और अधिक साफ-सुथरा बनाने के लिए aux तरीके बनाने का सुझाव दूंगा:
/** @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)