javascript - 为什么 Express Route 在另一个文件中完成时不存储缓存
问题描述
当我从另一个文件中调用我的代码时,缓存不起作用,但是当我将它保存在同一个文件中时它会起作用。有人可以帮我弄清楚为什么我使用中间件文件时没有发生缓存
工作代码:
var express = require('express');
var cache = require('../middleware/cache');
var controller = require('../controllers/author');
var router = express.Router();
const client = require("express-redis-cache")({
host: process.env.REDISCACHEHOSTNAME,
port: process.env.REDISCACHEPORT,
auth_pass: process.env.REDISCACHEKEY
});
router.route('/').get(client.route(), controller.listAllPage);
module.exports = router;
如您所见,第一个调用使用数据库,但接下来的几个调用使用缓存:
当我将此代码移出到 ../middleware/cache.js 时,代码会执行,但永远不会创建缓存文件。您还可以看到,由于没有缓存文件,每次调用都会继续调用数据库:
// ../middleware/cache.js
const cache = function(client){
return (req, res, next) => {
const client = require("express-redis-cache")({
host: process.env.REDISCACHEHOSTNAME,
port: process.env.REDISCACHEPORT,
auth_pass: process.env.REDISCACHEKEY
});
// Simple test
client.route();
next();
}
}
module.exports = cache;
// route file
var express = require('express');
var cache = require('../middleware/cache');
var controller = require('../controllers/author');
var router = express.Router();
router.route('/').get(cache(), controller.listAllPage);
module.exports = router;
解决方案
好的....所以 express-redis-cache client.route 函数返回中间件!所以你只需返回它:
const cache = function(){
const client = require("express-redis-cache")({
host: process.env.REDISCACHEHOSTNAME,
port: process.env.REDISCACHEPORT,
auth_pass: process.env.REDISCACHEKEY
});
// Simple test
return client.route();
}
我在 console.log(client.route()); 之后发现了这一点
推荐阅读
- ios - 致命异常:NSInternalInconsistencyException 上下文已经有一个协调器;无法替代
- python - fetchall() 抛出“以前的 SQL 不是查询”。用于删除查询
- heroku - heroku - 找不到该进程类型(网络)
- asp.net - 配置 Docker 以使用代理服务器
- graphql - 错误:`@scalarList` 的策略参数的有效值为:RELATION
- xpath - xQuery 按类别分组输出
- c# - 强制 MVC CookieAuthentication 提前超时,然后设置滑动和绝对过期的组合
- php - 在面积图中设置动态图形
- d3.js - 将条形图的标签文本旋转 90 度
- python - 在 Python 中拆分和提取后字符串行丢失