簡體   English   中英

如何正確使用Redis與Koa(node.js)

[英]How correctly use Redis with Koa (node.js)

我嘗試從redis db獲取信息並將其作為響應主體返回給用戶。 首先,這是一個失敗的代碼:

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

但我顯然誤解了為什么第二個工作正常。 請問yieldyield askRedit具有比在同一個行為yield next

編輯:我剛剛看到一個似乎有點回答的頁面: https//github.com/visionmedia/co/blob/master/examples/redis.js

所以現在我將嘗試理解這些神奇的產量..這是一種用異步調用做同步事情的方法嗎?

這是正確的解決方案:

"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

當然還有“共同復興”

謝謝你!

你也可以使用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM