我想使用redis和node.js验证用户的网站登录数据。
以下是我现在正在做的示例代码
var redis = require('redis');
var client = redis.createClient();
var userID = 'aaa';
var password = '123456';
client.sadd('userIDs', userID, redis.print);
client.hset('id2password', userID, password, redis.print);
client.sismember('userIDs', userID, function(err, result) {
if(err) {
console.log('Error: ' + err);
return;
}
if(result == 1) {
client.hget('id2password', userID, function(err, result) {
if(err) {
console.log('Error: ' + err);
return;
}
if(result == password) {
console.log('All data are correct.');
} else {
console.log('Wrong password.');
}
});
} else {
console.log(userID + ' doesn\'t exist.');
}
});
对我来说,这段代码很难读懂。因为在“if”语句之后我想要做的所有事情都包含在回调函数中。如何让它更容易阅读?
我希望我的代码可以像这样重写。
var redis = require('redis');
var client = redis.createClient();
var userID = 'aaa';
var password = '123456';
client.sadd('userIDs', userID, redis.print);
client.hset('id2password', userID, password, redis.print);
if(mySismember('userIDs', userID)) {
if(myHget('id2password', userID) == password) {
console.log('All data are correct.');
} else {
console.log('Wrong password.');
}
} else {
console.log(userID + ' doesn\'t exist.');
}
是否有可能实现这一目标?
我知道redis中的命令是异步执行的。看起来在这种情况下使用回调函数是不可避免的。