2016-07-13 53 views
1

我想用knex js使用模板中的數據(使用handlebars和expressjs)來驗證用戶來創建一個查詢。我創建了一個查詢,然後將其添加到驗證用戶登錄後的變量中。 問題是我有麻煩讓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響應本身)。

還要注意結果是一個對象數組,即使在引用單個行的單個列時也是如此。所以要提及你必須使用的密碼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); 
    });