Prova questa prima chiamata res.render() nel vostro percorso:
res.locals.path = req.path;
res.render('/page');
o
res.render('/page', { path: req.path });
allora si sarebbe dovuto fare un una serie di istruzioni if / else nella tua vista (come suggerisce la soluzione sopra).
- if(currentUrl === '/')
li(class='active')
a(href='/') Current Driver Standings
- else
li
a(href='/') Current Driver Standings
Io però, preferiscono fare questo sul lato client, invece, per mantenere i file liberi da quanto più logica possibile il mio modello:
Nel file di modello di pagina (questo è ejs, non è sicuro di come eco in giada):
<body data-path="<%= path %>">
Poi, con jQuery si può afferrare il percorso da corpo e allegare una classe di attivo:
$(function(){
var path = $('body').attr('data-path');
$('nav li a[href='+path+']').parents('li').addClass('active');
});
Aggiornamento: È anche possibile utilizzare var path = window.location.pathname
invece di salvarlo per un attributo body
//no need to save path to <body> tag first:
$(function(){
var path = window.location.pathname;
$('nav li a[href='+path+']').parents('li').addClass('active');
});
L'unica cosa che vorrei dire al riguardo è che si sta facendo affidamento sull'utente che ha JS (non è una grande preoccupazione al giorno d'oggi) ma si potrebbe finire con altre cose esistenti come attributi per qualche motivo e un sacco di brutto markup prodotto – Jon
C'è anche un refuso nel tuo esempio? Req.path è disponibile in EJS? Non dovrebbe essere la proprietà del tuo modello di vista? – Jon
scusa, nei miei percorsi faccio res.locals.req = req così ho accesso a tutte quelle informazioni. Ma ho appena capito che puoi anche usare window.location.pathname invece di salvarlo sul body tag. – chovy