如何让redis + node.js代码更容易阅读?

时间:2015-03-22 14:30:17

标签: javascript node.js callback redis

我想使用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中的命令是异步执行的。看起来在这种情况下使用回调函数是不可避免的。

0 个答案:

没有答案