わかりました。まず、mongoose
を使用していますか 右?
User
findOne(query)
などのメソッドに応答するマングースモデルです 、findOneAndUpdate(query, update, opts)
など。
これらのメソッドのいずれかを呼び出した後、メソッドexec()
を呼び出します。 クエリを返します。
クエリは正確にはPromiseではないため、Mongoが使用するPromiseを指定する必要があります。ここではネイティブのものを使用することをお勧めしますので、プロジェクトに次の行を追加してください:
const mongoose = require('mongoose')
mongoose.Promise = Promise
さて、この指示はあなたに約束を返します、いいですね!
User.findOne(q).exec()
これで、ロジックを使用してPromiseチェーンを作成できます。例:
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)