我正在使用 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 语句中来实现它的工作,但它看起来很难看,而且由于我有很多路线,我最终会重复很多代码,如何获得它的任何帮助使用我的代码的解决方案将不胜感激。提前致谢!
最佳答案
Javascript 开发中的一个命令问题是 Spaghetti 回调。
您可以使用 https://github.com/kriskowal/q , promise 避免此类错误并使您能够构建更清晰的代码,或者您可以使用 https://github.com/caolan/async ,这也可以处理您的回调。
从事 Node.js 项目的最大优势之一是其背后的社区。因此,您可以搜索合适的 npm 包来帮助您构建项目。
关于node.js - 如何使用redis在 Node 中缓存查询数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22632035/