javascript - 如何正确使用 Redis 与 Koa (node.js)

标签 javascript node.js callback redis koa

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

所以现在我将尝试理解这些神秘的 yield ..这是一种通过异步调用进行同步操作的方法吗?

最佳答案

这是正确的解决方案:

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

感谢我自己!

关于javascript - 如何正确使用 Redis 与 Koa (node.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25496360/

相关文章:

node.js - 是否可以在 React Native 中创建可重用的 fetch 函数?

json - 无法从curl访问JSON值

node.js - http statusCode 有时未定义

javascript - Sequelize 调用结构

java - 垃圾收集和回调

javascript - 如何在不使用 IFrame 的情况下在页面上显示 PDF 的 HTML5 转换?

javascript - momentjs秒到一个日期

java - 抄写员 - 同时进行多个回调

javascript - AJAX jQuery 每 5 秒刷新一次 div

javascript - location.href 指向没有 http ://的链接