【发布时间】:2012-01-24 15:49:09
【问题描述】:
我是 Node 新手,并试图确保我为 JSON 驱动的 Web 应用程序使用合理的设计。
我有一堆数据存储在 Redis 中,我正在通过节点检索它,并将结果从 Redis 中流出。这是我正在做的一个很好的例子:
app.get("/facility", function(req, res) {
rc.keys("FACILITY*", function(err, replies) {
res.write("[");
replies.forEach(function (reply, i) {
rc.get(reply, function(err, reply) {
res.write(reply);
if (i == replies.length-1) {
res.write("]");
res.end();
}
else
res.write(",");
});
});
});
});
基本上我从 Redis 获取一组键,然后请求每个键,将结果流式传输到半手动创建的 JSON 中(来自 Redis 的字符串已经在 JSON 中)。现在这很好用,但我不禁认为 i == replies.length-1 有点不整洁?
我可以在 Redis 中使用 mget 来完成所有这些工作,但这并不是我真正想要实现的重点;这是使用 forEach 处理异步循环的最佳方式,流式传输输出并在循环完成后优雅地关闭与 res.end 的连接。
这是最好的方法,还是我可以遵循更优雅的模式?
【问题讨论】:
-
对于深层嵌套函数回调,我会使用 async.js 库。
标签: javascript node.js redis