node.jsとRedis(Redisパッケージ)を使用してログインシステムを作成したいが、入力データとデータベースデータを比較するたびに、混乱する結果になる。これが最初の方法です:ログインシステム - Node.jsとRedis
私はログイン名とパスワードはOKですプラスそれは
const Redis = require("redis");
const client = Redis.createClient();
exports.userLogin = (username, password, errMsg, successMsg, res) => {
client.keys("user*", (err, replies) => {
let isFound = false;
for (let i = 0; i < replies.length; i++) {
client.hgetall(replies[i], (err, value) => {
if (value.user === username && value.password === password) {
isFound = true;
}
});
}
console.log(isFound);
if (isFound) {
successMsg(username, res);
} else {
errMsg(res);
}
})
)}
:
exports.userLogin = (username, password, errMsg, successMsg, res) => {
client.keys("user*", (err, replies) => {
for (let i = 0; i < replies.length; i++) {
client.hgetall(replies[i], (err, value) => {
if (value.user === username && value.password === password) {
successMsg(username, res);
} else {
console.log("length: ", replies.length - 1);
console.log("i: ", i);
if(replies[i] === replies.length - 1) {
errMsg(res);
} else {
console.log("else statement: ", replies[i] === replies.length - 1);
return true;
}
}
});
}
})
)}
パスワードとログインがOKでも動作しますが、ページに何かがロードされていてerrMsg関数が実行されないため、パスワードが正しくない場合は動作しません。あなたはなにか考えはありますか?
'hgetall'は非同期呼び出しですので、結果を得る前に' isFound'のテストが行われた場合に起こります。 –
@ t.nieseこのコードを変更して動作させるにはどうすればよいですか? – miqezjo
もう1つの問題は、ループ内で非同期呼び出しを作成することです。 –