我想从MongoDB获得一个用户。所以我应该使用异步功能来获得正确的结果。但是它返回了我[对象,承诺]。如何使用这些数据?
async function getUsers() {
var allUsers = null;
await MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db('mydb');
dbo.collection("users").find({})
.toArray(function(err, results) {
if (err)
throw error;
db.close();
allUsers = results;
});
});
}
app.get('/user/', function(req, res) {
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var dbo = db.db('mydb');
var id = req.params.id;
var allUsers = getUsers();
res.render('pages/user', {users: allUsers });
db.close();
});
});
答案 0 :(得分:2)
您正在混合promise和简单的回调。您需要选择一个并持续使用它。这是使用promises进行编码的方法-使用MongoDb如果正确使用就可以返回的promises:
main
我从路由处理程序中删除了数据库操作,因为它们实际上没有做任何事情,并且数据库内容已经在async function getUsers() {
const db = await MongoClient.connect(url);
try {
const dbo = db.db('mydb');
const results = await dbo.collection("users").find({});
return results;
} finally {
db.close();
}
}
app.get('/user/', function(req, res) {
getUsers().then(allUsers => {
res.render('pages/user', {users: allUsers });
}).catch(err => {
console.log(err);
// send some sort of error response here
res.sendStatus(500);
});
});
内部。