首页 > 解决方案 > 有没有比为我正在使用的每个页面的导航栏定义一个变量更好的方法?

问题描述

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

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文件不会给我一个登录未定义错误?

标签: javascriptnode.jsexpressejs

解决方案


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

这样的事情将解决这种情况:

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

// The rest goes here

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

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


推荐阅读