【发布时间】:2021-01-11 11:05:00
【问题描述】:
背景:为了注销用户,我需要访问位于app.js 中的对象redisClient。如何从 2 级深度的模块访问 redisClient?我不知道如何从下游返回redisClient 的新版本。
来自 app.js
const session = require('express-session');
const redis = require('redis');
const redisClient = redis.createClient();
const RedisStore = require('connect-redis')(session);
const myEndpoints = require('./controllers/my-endpoints');
app.use(myEndpoints);
来自 my-endpoints.js
const router = express.Router();
const someMiddleware = require('./some-middleware');
router.get('/logout', someMiddleware.logout);
module.exports = router;
来自 some-middleware.js
exports.logout = function(req, res) {
// uh oh I'm 2 layers deep. How do I get to redisClient from here?
redisClient.del(req.session.id, function(err, response) {
console.log(err);
});
req.session.destroy(function(error) {
if (error) res.clearCookie(process.env.SESSION_NAME);
res.redirect('/');
});
}
【问题讨论】:
-
我认为你可以用
app.set('myClient', redisClient)存储它,然后用app.get('myClient')获取它 -
req.app包含app对象,因此中间件可以从那里获取应用程序对象。