为什么这个简单的node.js代码冻结了?

时间:2012-07-13 21:28:21

标签: node.js asynchronous redis express

这是示例node.js代码的扩展:

var express = require('express');
var application = express.createServer();

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

client.on("error", function (err) {
    console.log("Error " + err);
});

client.set("test key", "TEST KEY VALUE", redis.print);

application.get('/', function(request, response) {
        client.get('test key', function(err, value) {
            client.quit();
            response.send('The value of "test key" is: ' + value);
        });
});

application.listen(2455);

服务器启动正常,但访问时,页面加载一段时间最终错误 - “没有收到数据”。

我有redis运行,键保存很好,我也可以通过client.get()在节点的repl中查看它们。

我想我错过了关于异步程序如何工作的一些理论。

2 个答案:

答案 0 :(得分:1)

我认为Redis / redis库不要求您明确终止客户端连接。即使你这样做,也需要确保已经调用了成功或错误的回调。在退出客户之前处理。

希望它有所帮助。

答案 1 :(得分:1)

您可能会收到错误,并且因为您没有在res.send之前检查 err 变量,所以您的应用程序不会返回任何内容。尝试添加以下内容: if(err) throw err; 在client.get之后并检查STDOUT