将会话变量从控制器传递到快速js中的视图

时间:2017-06-04 22:20:37

标签: javascript express authorization

在使用此代码登录到应用程序后重定向到主页面的快速控制器中:

 req.session.user = user.userLogin;
 if (req.session.user=='Admin') {
    global.loggedAdmin = user.userLogin;
 }
 else {
    global.loggedUser = user.userLogin;
 }   
 res.redirect('/');

在主菜单中检查用户是否已登录:

nav#menu.panel(role='navigation')
    ul
        li
        if loggedUser
            li
                span.setting Welcome #{loggedUser}
                    a(href='/account')
                        i.fa.fa-cog
            li
                hr
            li
                a(href='/logout') Logout
            li
        else if loggedAdmin
            li
                span.setting Welcome #{loggedAdmin}
                    a(href='/account')
                        i.fa.fa-cog
            li
                hr
            li
                a(href='/articles') Articles
            li
                hr
            li
                a(href='/files') Files
            li
                hr
            li
                a(href='/users') Users
            li
                hr
            li
                a(href='/logout') Logout
        else
            li
                a(href='/login') Log in
            li
                hr
            li
                a(href='/register') Register

在app.js中:

app.use(session({
    secret: 'sdfghjkl2345678tyu',
    unset:'destroy',
    resave: false,
    saveUninitialized: false
}));

但是,当首次以管理员身份登录并从其他设备菜单打开网站时,将用户登录为管理员。我可以在不使用全局控制器的情况下将会话变量传递给pug模板吗?如果是,该怎么做?

1 个答案:

答案 0 :(得分:0)

首先,在app.router()中间件之前使用app.use()中间件非常重要。

您可以在app中间件中尝试这种方式

app.use((req, res, next) => {
    res.locals.myVar = 'sample value';
    next();
});

要获取myVar的值,请在jade文件中使用

index.jade

extends layout
block content
    value of myVar is #{myVar}

瞧!!!

但是你可能想要改变程序,你现在正在使用它。这不是一种有前途和安全的方式。尝试使用适当的JSON值呈现页面。