【问题标题】:How to cache query data in node with redis如何使用redis在节点中缓存查询数据
【发布时间】:2014-05-03 03:29:46
【问题描述】:

我正在使用 Express、Postgresql 和 Redis 在 Node 中构建 API,并且在 Node 方面我是一个完整的初学者。我正在尝试设置 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 语句中来让它工作,但它看起来很丑,因为我有很多路线,我最终会重复很多代码,任何帮助我如何得到这个非常感谢使用我的代码的解决方案。提前致谢!

【问题讨论】:

  • 我们即将做同样的事情,期待 MySQL、Hapi 和 Redis。您是否设法找到任何文档或示例?
  • @AdrianLynch 不抱歉,我从来没有让它工作,也找不到任何可以帮助我的例子。

标签: node.js postgresql caching express redis


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-01-19
    • 2021-08-16
    • 2020-07-13
    • 2018-02-13
    • 2020-04-21
    • 1970-01-01
    • 2021-07-18
    • 2020-01-18
    • 2021-05-09
    相关资源
    最近更新 更多