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 :(
这是有用的,谢谢! – 2012-04-17 01:13:26