2016-07-13 3 views
1

テンプレートのデータ(ハンドルバーとexpressjsを使用)を使用してknex jsを使用してクエリを作成して、ユーザーを検証します。私は、クエリを作成し、それを変数に追加した後、ユーザーのログインを検証します。 要点は、私がそれをしたいと思うことを行うためにknexクエリーを作成するのに苦労していることです。私は何が間違っているのか分かりません。knex jsでユーザーとパスワードの検証を行う

var usernameReq = req.body.username; 
    var passwordReq = req.body.password; 
    var pass; 
    knex('users').where({ 
    username: usernameReq }).select('password').then(
    function(result){ 
     pass = result; 
     }).catch(function(error) { 
    console.log(error); 
}); 

if (passwordReq === pass){ 
    //login 
} 

答えて

0

Knexは、非同期の約束を使用します。

if (passwordReq === pass)は約束外です。つまり、結果は利用できません。

ifとすべてのコードは、then(...)のクエリ結果(http応答自体など)に応じて配置します。

結果は、1行の単一の列を参照する場合でも、オブジェクトの配列であることに注意してください。パスワードを参照するには、使用する必要がありますresult[0].password

var usernameReq = req.body.username; 
var passwordReq = req.body.password; 
knex('users') 
    .where({ username: usernameReq }) 
    .select('password') 
    .then(function(result) { 
    if (!result || !result[0]) { // not found! 
     // report invalid username 
     return; 
    } 
    var pass = result[0].password; 
    if (passwordReq === pass) { 
     // login 
    } else { 
     // failed login 
    } 
    }) 
    .catch(function(error) { 
    console.log(error); 
    }); 
関連する問題