2016-08-01 32 views
0

データベースに格納されている入力済みのユーザー名とパスワードを確認しようとしています。 私の解決策は正しくありません。自分のコードよりも優れたものがあるかもしれません。NodeJsのユーザー名とパスワードの確認null

ここでは、これまでのところです:console.log(callback);戻りヌル、

私のコードで
function login (username, password, callback) { 
    var query = "SELECT * FROM users WHERE username = ?"; 

    connection.query(query, [username], function (err, results) { 
     if (err) return callback(err); 
     if (results.length === 0) return callback(); 
     var user = results[0]; 

     if (!bcrypt.compareSync(password, user.password)) { 
      return callback(); 
     } 

     callback(null, { 
      id:   user.id.toString(), 
     }); 

    }); 
} 
app.get('/salam', function (req, res) { 
    var username = 'mahdi'; 
    var originalPassword = 'a'; 

    login(username , originalPassword,function (callback) { 
     console.log(callback); 
    }); 
}); 

が、ユーザ名とパスワードが正しいことを確認します。これをどうすれば解決できますか?

+0

エラー処理するために必要とされますか? –

答えて

2

callback関数では、引数は2つではありますが、エラーコールバックには1つの引数しかありません。

errorsuccess場合、最初のパラメータの値は常にnullなり、引数として渡された値がないようif (!bcrypt.compareSync(password, user.password)) {場合には、第1引数の値はundefinedになります。

提案:Booleanfalse又はtrue)として使用最初の引数と値に基づいて、コールバックを処理します。

function login(username, password, callback) { 
 
    var query = "SELECT * FROM users WHERE username = ?"; 
 

 
    connection.query(query, [username], function(err, results) { 
 
    if (err) return callback(false); 
 
    if (results.length === 0) return callback(); 
 
    var user = results[0]; 
 

 
    if (!bcrypt.compareSync(password, user.password)) { 
 
     return callback(false); 
 
    } 
 
    callback(true, { 
 
     id: user.id.toString(), 
 
    }); 
 

 
    }); 
 
} 
 
app.get('/salam', function(req, res) { 
 
    var username = 'mahdi'; 
 
    var originalPassword = 'a'; 
 

 
    login(username, originalPassword, function(success, value) { 
 
    if (success) { 
 
     console.log(value); 
 
    } 
 
    }); 
 
});

+0

OPのコードには2つの場所があります(あなたの中には1つの場所があります)関数が引数なしで呼び出されるので、 'callback'は' undefined'になります。 – nnnnnn

+0

@nnnnnn更新されました..その部分を逃しました;) – Rayon

+0

@レイヨンありがとう、問題解決済みの卿:)受け入れるために私に待ってください –

1

あなたがコールバックで何かを通過しなかったので、それは、する必要があります。このように変更します。

function login (username, password, callback) { 
    var query = "SELECT * FROM users WHERE username = ?"; 

    connection.query(query, [username], function (err, results) { 
     if (err) return callback(err); 
     if (results.length === 0) return callback(null, false); 
     var user = results[0]; 

     if (!bcrypt.compareSync(password, user.password)) { 
      return callback(null, false); 
     } 

     callback(null, true, { 
      id:   user.id.toString(), 
     }); 

    }); 
} 
app.get('/check', function (req, res) { 
    var username = 'mahdi'; 
    var originalPassword = 'a'; 

    login(username , originalPassword,function (err, result, id) { 
     console.log(err); 
     console.log(result); 
     console.log(id); 
    }); 
}); 

resultは、アクションのtrue|falseを見つけるためのものです。そしてresultcallbackための真

またerrときidは意味あなたは既にNULLとしてコールバックの最初のパラメータを設定している

+0

何かを渡さない場合(2つの場所での場合)、引数は 'null'ではなく' undefined'になります。しかし、OPのコードが明示的に 'null 'を渡すという成功事例であると仮定しています。 – nnnnnn

+0

@Ebrahim Pasbani +1ありがとうEbrahim agha –

関連する問題