2012-04-16 49 views
1

Node.js和redis看起来很热,但我正在烧。我不能优雅地克服看起来像一个非常简单的任务:我应该如何编写简单的顺序GET?

给定3个数字,检查前两个是否大于10.如果是,打印第三个数字。

我没有完成这个任务与此相当滑稽脚本:

var http = require("http"); 
var redis = require("redis"); 
client = redis.createClient(); 

http.createServer(function(request, response) { 
    client.SET("key1", "11"); 
    client.SET("key2", "9"); 
    client.SET("key3", "3"); 

    response.writeHead(200, {"Content-Type": "text/plain"}); 
    response.write("Hello\n\n"); 
    client.GET("key1", function(err, reply) { 
     response.write(reply + "\n\n"); 

     if(parseInt(reply) > 10) { 
      client.GET("key2", function(err, reply) { 
       response.write(reply + "\n\n"); 

       if(parseInt(reply) > 10) { 
       client.GET("key3", function(err, reply) { 
        response.write(reply + "\n\n"); 

        response.end(); 
        client.end(); 
        }); 
       } else { 
       response.end(); 
       client.end(); 
       } 

      }); 
     } else { 
      response.end(); 
      client.end(); 
     } 
     }); 
    }).listen(8000); 

我注意到的一些事情是:我想要一个新的一次比一次

  • 是有必要巢?
  • response.end()需要呼叫write s出现。我如何避免在else块中重复它们?

然后我尝试这种风格查询DB的:

http.createServer(function(request, response) { 

client.SET("key1", "11"); 
client.SET("key2", "9"); 
client.SET("key3", "3"); 

var key1 = 0; 
var key2 = 0; 
var key3 = 0; 

response.writeHead(200, {"Content-Type": "text/plain"}); 
response.write("Hello\n\n"); 
client.GET("key1", function(err, reply) { 
     response.write(reply + "\n\n"); 
     key1 = parseInt(reply); 
    }); 

client.GET("key2", function(err, reply) { 
     response.write(reply + "\n\n"); 
     key2 = parseInt(reply); 
    }); 

client.GET("key3", function(err, reply) { 
     response.write(reply + "\n\n"); 
     key3 = parseInt(reply); 
    }); 

response.write(key1 + "\n\n"); 
response.write(key2 + "\n\n"); 
response.write(key3 + "\n\n"); 

response.end(); 
client.end(); 

一些阅读并经过一番思考,我的解释是,代码获取到response.write S中的异步的GET返回之前,然后响应被关闭,所以内部写入从不发生。至少我从第一个例子中注意到SET可以很容易地调用,但是我不知道(它看起来并不重要),如果它们是按照这个顺序实际设置的。

所以,也许我正在做一些不适合node和redis的东西。我必须缺少一些基本的和明显的东西。我需要做些什么来升级?

或者告诉我我要回去到phpMyAdmin :(

回答

相关问题