【问题标题】:How correctly use Redis with Koa (node.js)如何正确使用 Redis 和 Koa (node.js)
【发布时间】:2014-10-19 05:17:24
【问题描述】:

我尝试从 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;
});

但我显然误解了为什么第二个有效。 yield askRedit 中的 yield 是否与 yield next 中的行为相同?

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

所以现在我将尝试理解这些神秘的产量。这是一种用异步调用做同步事情的方法吗?

【问题讨论】:

    标签: javascript node.js callback redis koa


    【解决方案1】:

    这是正确的解决方案:

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

    感谢我自己!

    【讨论】:

    • 关于 Koa 和所有模块的文档很少!我很同情你,因为我也必须弄清楚这一切!
    【解决方案2】:

    你也可以使用:

    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);
    

    【讨论】:

      猜你喜欢
      • 2014-09-14
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-09
      • 2021-07-19
      • 2020-09-12
      相关资源
      最近更新 更多