首页 > 解决方案 > 为什么 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;

在此处输入图像描述

标签: javascriptnode.jsexpressredis

解决方案


好的....所以 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()); 之后发现了这一点


推荐阅读