如何正确使用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 askRedit
的yield
yield askRedit
是否与yield
的yield 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);