I'm having a hard time getting node, redis, and async to do what I want. I'm trying very basic things to grasp the patterns of redirecting control flow. Here, I hold a counter variable "success" that increases by one if a comparison key0 > key1
is true. They are static for now so it's always true; the only thing I wish to change is to increment success
. I refresh the browser to re-run the comparison and increment success
again.
My trouble is: when the page is refreshed, success
jumps by 2. I tried putting a callback with incr
, but it looks like only get
-type commands have callbacks. I have a client.end();
in my script, but it prevented me from reloading the page so I commented it out. I suspect this is the source of my problem. If so, where does client.end
belong?
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);
}
);
}
}
Your browser most likely requests favicon.ico
and thus generates the extra request which runs your code a second time.