【问题标题】:Is there a better way than to define a variable for the navbar for every single page I'm using it in?有没有比为我正在使用的每个页面的导航栏定义一个变量更好的方法?
【发布时间】:2021-06-18 12:16:50
【问题描述】:

抱歉标题措辞不佳,我不确定最好的措辞方式,我认为用代码来解释会更容易。所以可以说我有以下内容:

router.get('/chest', (req, res)=>res.render('muscles/chest/chest', {login: req.isAuthenticated(), user: req.user}));
router.get('/abs', (req, res)=>res.render('muscles/abs/abs', {login: req.isAuthenticated(), user: req.user}));
router.get('/biceps', (req, res)=>res.render('muscles/biceps/biceps', {login: req.isAuthenticated(), user: req.user}));
router.get('/frontdeltoids', (req, res)=>res.render('muscles/frontdeltoids/frontdeltoids', {login: req.isAuthenticated(), user: req.user}));
router.get('/quadriceps', (req, res)=>res.render('muscles/quadriceps/quadriceps', {login: req.isAuthenticated(), user: req.user}));

在我的 layout.ejs 文件中,我有:

<% if (login) { %>
    <li class="nav-item">   
    <a class="nav-link" href="/users/profile/<%= user.id%>"><span class="fas fa-user"></span> Profile</a>
    </li>
        <li class="nav-item">
        <a class="nav-link" href="/users/logout"><span class="fas fa-sign-in-alt"></span> Logout</a>
    </li>

有没有更好的方法来做到这一点,而不是必须将“登录:req.isAuthenticated(),用户:req.user”添加到我拥有的所有内容中,所以我的 layout.ejs 文件没有给我未定义的登录错误?

【问题讨论】:

标签: javascript node.js express ejs


【解决方案1】:

我想到的第一个解决方案是实现一个可以“全球化”局部变量的中间件。

这样的事情可以解决这个问题:

router.use(function(req, res, next){
    res.locals.login = req.isAuthenticated();
    res.locals.user = req.user;
    next();
});

// The rest goes here

如果我以某种方式误解你,请纠正我。

更新:请查看@ikhvjs 的评论(感谢)。

【讨论】:

    猜你喜欢
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多