probar este antes de su llamada res.render() en la ruta:
res.locals.path = req.path;
res.render('/page');
o
res.render('/page', { path: req.path });
entonces habría que hacer una un montón de sentencias if/else en su vista (como sugiere la solución anterior).
- if(currentUrl === '/')
li(class='active')
a(href='/') Current Driver Standings
- else
li
a(href='/') Current Driver Standings
que sin embargo, prefiere hacerlo en el lado del cliente en lugar, para mantener los archivos libres de tanta lógica como sea posible mi plantilla:
En el archivo de plantilla de página (esto es ejs, no está seguro de cómo se hacen eco en jade):
<body data-path="<%= path %>">
continuación con jQuery se puede agarrar la trayectoria del cuerpo y adjuntar una clase activa:
$(function(){
var path = $('body').attr('data-path');
$('nav li a[href='+path+']').parents('li').addClass('active');
});
Actualización: También se puede simplemente usar var path = window.location.pathname
en lugar de guardarlo a un atributo de 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');
});
Lo único que diría al respecto, es que confía en que el usuario tenga JS (lo cual no es una gran preocupación en estos días) pero puede terminar con otras cosas que existen como atributos por algún motivo y un marcado marcado – Jon
También hay un error tipográfico en tu ejemplo? ¿Está disponible req.path en EJS? ¿No debería ser propiedad de su modelo de vista? – Jon
lo siento, en mis rutas hago res.locals.req = req entonces tengo acceso a toda esa información. Pero me acabo de dar cuenta de que también puedes usar window.location.pathname en lugar de guardarlo en la etiqueta del cuerpo. – chovy