我正在使用节点模块mongodb v3.2.7
,并使用express
来实现我的api
我使用callback
。而且,效果很好
函数findItem
const findItem = function (id, callback) {
if (db) {
const collection = db.collection('transaction')
collection.find({ user_id: id})
.project({ ready: 1, online: 1, status: 1})
.toArray(function (err, docs) {
if (err) {
callback(err)
} else {
callback(null, docs)
}
})
}
}
我的api
app.get('/', (req, res) => {
try {
if (req.query.user_id) {
const contentType = 'application/json'
res.set({ 'Access-Control-Allow-Origin': '*',
'Content-Type': contentType })
const user_id = parseInt(req.query.user_id, 0)
findItem(user_id , function (err, docs) {
if (err) {
res.status(500).end()
return res.send(err)
}
const data = processData(docs)
console.log('data', data)
return res.send(data)
})
} else {
res.send()
}
} catch (ex) {
console.log(ex)
}
})
然后,我尝试使用async/await
而不是callback
。但是,它不起作用。我犯了什么错误?
功能findItemAsyncAwait
const findItemAsyncAwait = async function (id) {
if (db) {
const collection = db.collection('transaction')
var docs = await collection.find({ user_id: id })
.project({ ready: 1, online: 1, status: 1})
.toArray()
return docs
}
}
我更改过的api
app.get('/', (req, res) => {
try {
if (req.query.user_id) {
const contentType = 'application/json'
res.set({ 'Access-Control-Allow-Origin': '*',
'Content-Type': contentType })
const user_id = parseInt(req.query.user_id, 0)
const promiseDocs = findItemAsyncAwait(user_id)
promiseDocs.then((docs) => {
console.log('docs', docs) // <= docs [], docs is an empty array without any document
const data = processData(docs)
console.log('data', data)
return res.send(data)
}).catch((err) => {
res.status(500).end()
return res.send(err)
})
} else {
res.send()
}
} catch (ex) {
console.log(ex)
}
})
我仍然陷在这个问题上。有人可以帮忙吗?
答案 0 :(得分:1)
您必须等待收集
const findItemAsyncAwait = async function (id) {
if (db) {
return await db.collection('transaction')
.find({ user_id: id })
.project({ ready: 1, online: 1, status: 1})
.toArray()
}
}