私はExpressとHandlebarsを使用して、ユーザーが設定してデータベースに格納した値を表示しています。Javascriptでのデータベースクエリの処理
ハンドルバーは、値「{{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
});
});
現在、このページの利回り:「座右の銘:[オブジェクトの約束]」、私は戻っていないので、その後、私は、私はページ上にレンダリングするために、これを行うページをレンダリングするときに
メイン関数の適切な値。
賢明な言葉がある人はいますか?
乾杯、
ディーン
のようになります。ここでは、コールバック
とqueryDatabaseの定義を作成する必要があると思います変更:私はまだdbQueryResultが "アイテム"と同じであることを定義しなければなりません。しかし、私が "next();"他のクエリを追加する場合は、userMottoCaughtセクションの引数を使用しますか?私が1行下に移動してelseフィールド自体に移動すると、それは失敗し、ページに "[object promise]"と表示されます。 ありがとうございました:) –