我正在尝试将express.static路径设置为基于会话变量的不同内容。相关代码如下。
app.use( '/', function(req, res, next ) {
if ( req.session.loggedIn ) {
console.log("loggedIn : " + req.session.loggedIn);
app.use('/', express.static(__dirname + '/private'));
next();
}
else {
console.log("not logged in.");
app.use('/', express.static(__dirname + '/public'));
next();
}
});
当我启动应用程序时,我开始没有设置req.session.loggedIn。因此它将使用/ public目录中的静态内容(其中包含一个针对公共用户的角度驱动的应用程序。)然后我进行登录(下面的代码)
app.post('/login', function( req, res ) {
req.session.loggedIn = true;
var message = {};
message.success = true;
message.text = "Logging you in...";
res.json(message);
});
将req.session.loggedIn变量设置为true。然后我点击页面上的刷新(并尝试了硬刷新,并缓存清除/刷新)。 console.log告诉我" loggedIn:true"正如预期的那样,它不会从/ private目录加载静态内容。它继续从/ public目录加载。
有人可以解释这个问题吗?
答案 0 :(得分:0)
express.static只是另一个中间件,因此您可以使用请求和响应参数直接调用它。不是直接将它添加到'/'路由,而是将它包装在另一个中间件中,如下所示:
var public_pages = express.static(__dirname + '/public');
var private_pages = express.static(__dirname + '/private');
app.use('/', function(req, res, next) {
if(req.session.loggedIn == 1) {
private_pages(req, res, next);
} else {
public_pages(req, res, next);
}
});