2016-08-16 9 views
1

私は複数のモジュールで認証を行っていますが、実際にユーザーを認証しようとしています。Express/Nodeを使用してmysqlの結果から値を取得できません

connection.query('SELECT * FROM users WHERE username LIKE ?', [data.username], function (err, results) { 
    if (err) throw err; 
    var results=(JSON.stringify(results)); 
    console.log(results); 
    console.log(results.password) 
    if(results.password === password){ 
     var user = results; 
     // done(null, user); 
    } else { 
     console.log('else') 
     // done('Bad password', null) 
    } 
}); 

私は、ユーザー名に対応するレコードを検索し、その後、errまたはresultsを返し、このMySQLのクエリを持っています。これに

[ RowDataPacket { id: 12, username: 'qqq', password: 'qqq' } ] 

:私は、最初の結果を変換するJSON.stringifyを使用しました

[{"id":12,"username":"qqq","password":"qqq"}] 

しかしresults.usernameresults.passwordボットは未定義です。それで、stringyfiedされた結果がその中にオブジェクトを持つ配列であると私に見えます。

しかし、私は

console.log(results[0].username); 
console.log(results[0].password); 

を行うとき、彼らはまだundefinedです。だから、どのように私は変数の中にユーザー名/パスワードを保存するのですか?

+0

あなたは '使用してみましたforループはすべての返された結果をループしますか? – Derek

+0

私は 'console.log(results.length)を行うとき何らかの理由で結果が45であり、forループでは45とカウントされます。 –

+0

私の答えを参照してください、それが助けるかどうか参照してください – Derek

答えて

1

このように、結果セットをループしてみてください。

for (var i = results.length - 1; i >= 0; i--) { 
    var current = results[i]; 
    console.log(current); 
} 

その後、すべてがうまくいけば、あなたがして、各変数をチェックすることができるはずです。 current.usernameなど。

+0

ああ、stringify" 。私は私のforループが文字列中のシンボルの正確な数をどのように数えるのだろうと思っていました。これはむしろばかだ。とにかくここに残しておきます。私の間違いを指摘してくれてありがとう。 –

+0

問題ありません!時にはそれはちょうど目の第二のセットを取る、我々はすべて笑にそこにいた。 – Derek

+0

コードがどのように動作しているかを指摘するために、forループは結果配列内のすべてのオブジェクトをループし、結果配列には1つのオブジェクトしかないため、そのオブジェクトを現在のvarにプッシュします。 –