如何正确使用Redis和Koa(node.js)

我尝试从redis数据库获取信息,并将其作为响应的主体返回给用户。 首先,这是一个失败的代码:

var redis = require("redis"), koa = require("koa"); var app = koa(), port = process.argv[2] || 3000, client = redis.createClient(); app.use(function* (next) { client.get("test", function (err, res) { this.body = res; }); yield next; }); app.listen(port); console.log("listen on port " + port) 

肯定是因为收益调用在调用callback之前结束。

那么这里是一个成功的代码:

 function askRedit (callback) { client.get("test", callback); } app.use(function* (next) { this.body = yield askRedit; yield next; }); 

但我清楚地误解了为什么第二个人在工作。 yield yield askRedityield yield askRedit是否与yieldyield askRedit相同?

编辑:我刚才看到似乎回答了一个页面: https : //github.com/visionmedia/co/blob/master/examples/redis.js

所以现在我将尝试理解这些神秘的产量..这是一种做asynchronous调用的同步事物的方式?

这是正确的解决scheme:

 "Use strict"; var redis = require("redis"), coRedis = require("co-redis"), koa = require("koa"); var app = koa(), port = process.argv[2] || 3000, db = redis.createClient(), dbCo = coRedis(db); app.use(function* () { yield dbCo.set("test", 42); this.body = yield dbCo.get("test"); }); app.listen(port); console.log("listen on port " + port) 

这些链接帮助:

https://github.com/koajs/workshop/tree/master/01-co

http://www.jongleberry.com/koa.html

和“co-redis”当然

感谢我自己!

你也可以使用:

 var koa = require('koa'); var app = koa(); var redis = require('then-redis'); var db = redis.createClient('tcp://redis:6379'); db.set('my-key', 0); app.use(function *(){ db.incrby('my-key', 5); this.body = yield db.get('my-key'); }); app.listen(9000);