在我在后端api中实现redis cache之前,分页在后端和前端都工作得很好,在缓存数据之后,它就不再工作了。这是我在获取所有数据之前运行的中间件
const checkCache = (req, res, next) => {
client.get("posts", (err, data) => {
if (err) {
console.log(err);
sendFailureResponse(res, 500, err);
}
if (data != null) {
sendSuccessResponse(res, 200, JSON.parse(data));
} else {
//proceed to next middleware function
next();
}
});
};
控制器
const page = parseInt(req.query.page);
const size = parseInt(req.query.size);
const query = {};
if (page < 0 || page === 0) {
sendFailureResponse(res, 400, "invalid page number")
}
query.skip = size * (page - 1);
query.limit = size;
const posts = await Post.find({}, {}, query).populate("user", ["name"]);
client.setex("posts", 3600, JSON.stringify(posts))
sendSuccessResponse(res, 200, posts);
} catch (err) {
sendFailureResponse(res, 500, err.message);
}
如何从缓存返回分页结果?
1条答案
按热度按时间hfwmuf9z1#
您只需将页码添加到键中即可(
'page' + req.query.page
),然后每页都有缓存顺便说一句,你有一个错误在
checkCache
中间件:如果有错误,您可以同时调用sendFailureResponse
以及next
函数,您将得到“err\u stream\u write\u after\u end”错误