2012-04-23 148 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