0
My Expressアプリケーションでは、このコントローラメソッドを使用して、モデル関数を呼び出し、NeDBのfindメソッドを使用してドキュメントデータベースファイルを検索します。ここに検証メソッドがあります。NeDBのメソッドの非同期性を扱う方法は?
verify : function(username, password) {
db.find({ email: username }, function (err, docs) {
return passwordHash.verify(password, docs[0].password);
});
},
ここに、関数を呼び出すコードがあります。
post_admin : function(req, res) {
if (!req.body.email || !req.body.password) {
res.render('login', { title: 'Please provide your login details' });
}else if(''!=req.body.email && ''!=req.body.password){
var i = User.verify(req.body.email, req.body.password);
if(i){
res.render('admin/dashboard', { title: 'Successfully Logged In' });
}else{
res.render('login', { title: 'Not correct details!' });
}
}else{
res.render('login', { title: 'Not correct details!' });
}
},
...ただし、ファイルにあるデータと一致してもtrueを返してもfalseを返します。 db.findメソッド内でコンソールを操作すると、trueが表示されますが、verifyメソッドはfalseを返します。その結果、条件ブロックは常にelse部分を実行します。私が両方をコンソールにすると、db.findが何かを記録する前に条件が実行されるのがわかります。これはプログラミングの非同期性のためですか?私はどのビューをコントローラ内でレンダリングすべきかを判断する必要があるので、これをどのように処理すればよいでしょうか。ここでJavascriptの非同期性を損なうことなくこれを行う方法はありますか?私は明白な何かを欠いていますか