我刚开始用 node 实现 redis。在实现身份验证方法期间,我需要检查令牌是否存在于 redis 中,如果不更新 redis 和我的 mongo db 中的新令牌,我需要编写一个大的回调块并且无法正确获取结果。我们怎样才能让redis的回调变红。我们怎样才能使它同步。示例代码如下。
module.exports.authenticate = function(request, response)   {
    var reply = {};
    if(UserSchema)  {
        var UserModel, attributes;
        /** Registering User Model; **/
        mongoose.model('user', UserSchema);
        UserModel = mongoose.model('user');
        attributes = request.params;
        UserModel.findOne(attributes, "_id name email token", function(error, user) {
            if(!error && user)  {
                var token;
                //delete user.password;
                token = user.token;
                /** Checking token exists in redis; **/
                redisClient.get(token, function(error, value)   {
                    if(value === null && error === null)    {
                        /** Creating new token; **/
                        token = require('crypto').createHash('md5').update("" + (new Date()).getTime()).digest("hex");
                        user.token = token;
                        /** Storing new token on redis; **/
                        setTokenOnRedis(token);
                        /** Updating token in the user model; **/
                        UserModel.update({ _id : user._id}, { token : token }, function(error, user)    {
                            if(error !== null && user === null) {
                                deleteTokenOnRedis(token);
                                /** Error message; **/
                                reply = {
                                    error : true,
                                    code : "AUTH#001",
                                    msg : "User authentication failed, Please check user credentials."
                                }
                                response.send(reply);
                            }else if(error === null && user !== null)   {
                                reply = user;
                                response.send(reply);
                            }
                        });
                    }else if(value !== null)    {
                        reply = user;
                        response.send(reply);
                    }else   {
                        /** Error message; **/
                        reply = {
                            error : true,
                            code : "AUTH#001",
                            msg : "User authentication failed, Please check user credentials."
                        };
                        response.send(reply);
                    }
                });
            }else   {
                /** Error message; **/
                reply = {
                    error : true,
                    code : "AUTH#001",
                    msg : "User authentication failed, Please check user credentials."
                }
            }       
        });
    }else   {
        /** Error message; **/
        reply = {
            error : true,
            code : "AUTH#001",
            msg : "User authentication failed, Please check user credentials."
        }
        response.send(reply);
    }
};