我想使用node.js和Redis(Redis包)创建登录系统,但是每次我将输入数据与数据库数据进行比较时,我都会得到一个令人困惑的结果。这是第一种方法:登录系统 - Node.js和Redis
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);
}
})
)}
我不断收到假即使登录名和密码都OK加上它不执行ERRMSG功能 第二个例子:
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;
}
}
});
}
})
)}
它适用于密码和登录正常的情况,但如果它们不正确,则不会发生,因为页面正在载入内容并且不执行errMsg函数。你有什么想法?
'hgetall'是一个异步调用,所以如果在得到结果之前测试'isFound',就会发生。 –
@ t.niese如何修改此代码以使其正常工作? – miqezjo
另一个问题是您在循环中创建异步调用。 –