更改静态内容目录

时间:2014-12-22 02:50:49

标签: angularjs node.js session express

我正在尝试将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目录加载。

有人可以解释这个问题吗?

1 个答案:

答案 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);
    }
});