2012-04-23 111 views
1

我很难得到节点,redis和async来做我想做的事情。我正在尝试非常基本的东西来掌握重定向控制流的模式。在这里,如果key0 > key1的比较结果为真,则我保留一个计数变量“成功”,该变量增加1。它们现在是静态的,所以它总是如此。我唯一希望改变的是增加success。我刷新浏览器重新运行比较并再次增加successIncr似乎运行两次 - 为什么?

我的问题是:页面被刷新时,success由2我试图把一个回调与incr跳跃,但它看起来像只get型命令有回调。我在脚本中有一个client.end();,但它阻止了我重新加载页面,所以我评论了它。我怀疑这是我问题的根源。如果是这样,client.end属于哪里?

var http = require("http"); 
var redis = require("redis"); 
var async = require("async"); 

client = redis.createClient(); 

http.createServer(function(request, response) { 
     // key "success" set to 0 externally, through redis-cli; 
     client.set("key0", "19"); 
     client.set("key1", "11"); 

     response.writeHead(200, {"Content-Type": "text/plain"}); 

     async.series([ 
       shortcut("key0"), 
       shortcut("key1"), 
       shortcut("success") 
      ], 

      function(err, results){ 
       if (results[0] > results[1]) { 
        client.incr("success", function(err, reply) { 
          response.write("incr done"); 
         }); 
        response.write(results[0] + "\n\n"); 
        response.write(results[1] + "\n\n"); 

        response.write(results[2]); 
       } 
       response.end(); 
       // client.quit(); 
     }); 
    }).listen(8000); 

function shortcut(key) { 
    return function(callback) { 
     client.get(key, function(err, reply) { 
          callback(null, reply); 
         } 
       ); 
    } 
} 

回答

4

您的浏览器最有可能请求favicon.ico,从而生成运行代码第二次额外的请求。

+0

伟大:(我想我需要路由来解决这个问题? – 2012-04-23 23:11:11

+0

那么,你也可以简单地检查请求的资源是否匹配或不匹配(任何适合你的更好)给定的模式。当index.html被请求时调用'incr' – JustSid 2012-04-23 23:13:33

+0

谢谢你,你是绝对正确的,它现在正在运行,我用了一个'url.parse',直到我找出如何处理请求。 – 2012-04-23 23:20:51