How to use Redis with Koa (node.js)

I am trying to get information from redis db and return it as the response body to the user. Firstly, here is the code that fails:

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) 

Of course, since the exit call ends before the callback is called.

Then here is the success code:

 function askRedit (callback) { client.get("test", callback); } app.use(function* (next) { this.body = yield askRedit; yield next; }); 

But I completely misunderstand why the second one works. Does yield in yield askRedit have the same behavior as yield next ?

EDIT: I just saw a page that seems to respond a little: https://github.com/visionmedia/co/blob/master/examples/redis.js

So, now I will try to understand this mystical profitability .. is this a way to do synchronous things with asynchronous calls?

+6
source share
2 answers

Here is the correct solution:

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

these links helped:

https://github.com/koajs/workshop/tree/master/01-co

http://www.jongleberry.com/koa.html

and co-redis of course

Thanks!

+8
source

You can also use:

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

Source: https://habr.com/ru/post/974336/


All Articles