#node.js #express #ejs
Вопрос:
Это мой шаблон заголовка, который будет загружаться на каждую страницу.
<!-- ======= Header ======= -->
<header id="header" class="d-flex align-items-center">
<div class="container d-flex align-items-center justify-content-between">
<h1 class="logo"><a href="index.html"><%= title %><span>.</span></a></h1>
<!-- Uncomment below if you prefer to use an image logo -->
<!-- <a href="index.html" class="logo"><img src="/assets/img/logo.png" alt=""></a>-->
<nav id="navbar" class="navbar">
<ul>
<%
const menu = [
{
name: 'Home',
url: '/'
},
{
name: 'About',
url: '/about'
},
{
name: 'Services',
url: '/services'
},
{
name: 'Portfolio',
url: '/portfolio'
},
{
name: 'Team',
url: '/team'
},
{
name: 'RatesCalculator',
url: '/ratesCalculator'
},
{
name: 'Contact',
url: '/contact'
}
]
for ( let i in menu ) { %>
<% if ( menu[i].name.toLowerCase() == activestate.toLowerCase() ) { %>
<li><a class="nav-link scrollto active" href="<%= menu[i].url %>" ><%= menu[i].name %></a></li>
<% } else { %>
<li><a class="nav-link scrollto" href="<%= menu[i].url %>" ><%= menu[i].name %></a></li>
<% } %>
<% } %>
</ul>
<i class="bi bi-list mobile-nav-toggle"></i>
</nav><!-- .navbar -->
</div>
</header><!-- End Header -->
Чтобы установить его динамически, на активной вкладке, я использую логику, приведенную ниже в шаблоне, и промежуточное программное обеспечение в index.js.
app.use(function(req, res, next){
console.log(req)
res.locals.title = "Marker";//To set website title
req.active = req.path.split('/')[1] // [0] will be empty since routes start with '/'
if (req.length === 0) req.active = "Home"
next();
});
Это работает, но я чувствую, что это немного сложный и повторяющийся код.
Не могли бы вы, пожалуйста, предложить лучший подход.