javascript - 有没有比为我正在使用的每个页面的导航栏定义一个变量更好的方法?
问题描述
抱歉标题措辞不佳,我不确定最好的措辞方式,我认为用代码解释会更容易。所以可以说我有以下内容:
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文件不会给我一个登录未定义错误?
解决方案
我想到的第一个解决方案是实现一个可以“全球化”局部变量的中间件。
这样的事情将解决这种情况:
router.use(function(req, res, next){
res.locals.login = req.isAuthenticated();
res.locals.user = req.user;
next();
});
// The rest goes here
如果我以某种方式误解你,请纠正我。
更新:请查看@ikhvjs 的评论(谢谢)。
推荐阅读
- php - PHP retrieve session value on drop down list
- c++ - changing key values of all elements in a multimap container
- hash - Will sha256 give all possible answers
- java - NullPointerException JavaFX ChoiceBox
- azure - ListBlobsSegmentedAsync 突然停止返回 Blob 目录中的文件,即使存储资源管理器显示文件在那里
- javascript - 具有键值的 JSON 对象的数组格式
- excel - 从 Excel 2019 中的 url 下载文件(适用于 Excel 2007)
- vb.net - VLC ActiveX 在 vb.net 中寻求帮助吧
- javascript - Jhipster Angular Gateway - 将过滤器传递给路由菜单
- python - Vscode 调试器 importError