如何使用redis缓存节点中的查询数据

时间:2014-03-25 10:41:25

标签: node.js postgresql caching express redis

我正在使用Express,Postgresql和Redis在Node中构建一个API,在节点方面我是一个完全的初学者。我试图设置redis来缓存来自postgres的查询响应但是我不知道如何在不重复每个文件中的实现的情况下执行它。

这是我的一些app.js

// connect to the postgresql database 
var database = require("./config/database")(app);
var pg = require("pg"); 
var conString = app.get('db uri');
var client = new pg.Client(conString); client.connect();

// an example of how my routes look like
app.get('/v1/users/:uid', users.getUser(client));

这是users.js

exports.getUser = function(client) {
    return function(req, res) {
    var userId = req.params.uid;

    var query = client.query("SELECT * FROM users WHERE users.id = ?",[userId]);

    query.on("row", function (row, result) {
      result.addRow(row);
    });

    query.on("end", function (result) {
      res.json(result.rows);
    });

  };
};

我在网上搜索了包括stackoverflow的内容,我找到的最近的解决方案可以在这个网页上找到using redis for cahing in node 他的解决方案看起来像这样:

var handler = function(response)
{
   response = JSON.stringify(response);
   client.setex('some-key-value', 21600, response);     
   res.end(response);
};

client.get('some-key-value', function (err, result) {
   if (err || !result)
      execute_function(zipcode, handler);
   else
      res.end(result);
});

我已经通过将所有内容包装在client.get if / else语句中但它看起来很丑陋而且因为我有很多路由我最终会重复很多代码,任何帮助我如何得到它使用我的代码的解决方案将非常感激。提前谢谢!

1 个答案:

答案 0 :(得分:-3)

Javascript开发中的一个命令问题是Spaghetti回调。

您可以使用https://github.com/kriskowal/q,承诺避免此类错误并使您能够构建更清晰的代码,或者您可以使用https://github.com/caolan/async来处理您的回调。

开发Node.js项目的最大优势之一就是它背后的社区。因此,您可以搜索合适的npm包来帮助您构建项目。