【发布时间】:2016-09-19 09:56:54
【问题描述】:
我正在使用 Express 和 Handlebars 来显示用户设置并存储在数据库中的值。
Handlebars 设置为显示值“{{userMotto}}”。 Express 执行以下操作:
function isUserAuthenticated(req, res, next) {
if (!req.user) {
res.render('index', {
user: req.user
});
} else {
currentUser = req.user.username;
userMottoCaught = queryDatabase("motto", currentUser);
next();
}
}
我希望它将“userMottoCaught”的值设置为它在数据库中找到的任何值。查询本身是这样的:
function queryDatabase(dbCollection, dbUID) {
this.dbCollection = dbCollection;
this.dbUID = dbUID;
return MongoClient.connectAsync(hiddenkeys.mongodbUri)
.then(function(db) {
return db.collection(dbCollection).findOneAsync({
_id: dbUID
});
})
.then(function(item) {
console.log("Found: ");
console.log(item);
return dbQueryResult;
})
.catch(function(err) {
//err
});
}
问题是我无法终生获取 dbQueryResult 并将其返回给函数 queryDatabase 本身。我想可能是因为它现在被返回到子函数而不是主函数。我高度怀疑这很容易解决,但我不知道如何解决这个问题。我在这里使用 Bluebird 来看看我是否可以通过承诺来解决这个问题,但我也不确定这是否是正确的路线。我也研究过回调,但我一生都无法弄清楚如何将这两个概念应用到我的代码中来解决我的问题。
稍后当我渲染页面时,我这样做是为了在页面上渲染它:
router.get('/', isUserAuthenticated, function(req, res) {
res.render('dashboard', {
user: req.user,
userMotto: userMottoCaught
});
});
目前这会在页面上产生:“Motto: [object Promise]”,因为我没有向主函数返回正确的值。
有没有人有一些明智的话?
干杯,
院长
【问题讨论】:
标签: javascript mongodb express promise handlebars.js