如何在Koa中正确使用Redis(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)

当然是因为yield调用在调用回调之前结束。

然后是成功的代码:

function askRedit (callback) {
    client.get("test", callback);
}

app.use(function* (next) {
    this.body = yield askRedit;
    yield next;
});

但是我显然误会了第二个为什么起作用。yieldin yield askRedit的行为in in 的行为相同yield next吗?

编辑:我刚刚看到一个页面似乎可以回答一些问题:https : //github.com/visionmedia/co/blob/master/examples/redis.js

因此,现在我将尝试了解这些错误的收益。这是通过异步调用完成同步操作的一种方法吗?

Gil2020/04/03 11:00:01

这是正确的解决方案:

"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”当然

多亏我自己!