Pregunta

Estoy usando Express en NodeJs, y estoy tratando de mantener mi punto de vista seca. Dentro de mi diseño, tengo algo como lo siguiente (estoy usando jade)

body
  nav.login
    -if(currentUser)
      ="logged in information"
    -else
      ="logged out information"
  !=body

El problema es que cada vez que me represento, ahora tengo que tener

res.render('anything.jade',{
  locals: {
    currentUser: req.session.currentUser,
    /*all of my other locals*/
  }
});

Parece un dolor tener que pasar por todas mis llamadas de representación y agregar eso, y luego hacer lo mismo si tengo que agregar cualquier otro lugareño al diseño. ¿Hay alguna forma de evitar tener que volver a escribir 'CurrentUser' en los lugareños en todas partes donde me represento?

¿Fue útil?

Solución

Sé que esta respuesta llega tarde, pero para la posteridad: si está utilizando Express, debe usar los ayudantes dinámicos suministrados, que son funciones auxiliares accesibles para la vista que toman req,res como argumentos. En tu caso:

app.dynamicHelpers({
  user: function(req, res){
    return req.session.currentUser;
  }
});

Lo que significa que su punto de vista ahora podría llamar #{user}

Otros consejos

Terminé haciendo lo siguiente:

Primero, configuré algunas variables locales

app.use(function(req,res,next){
  req.localvars = new Object;
  next();
});

Más tarde, establecí algunas variables locales

app.use(function(req,res,next){
  req.localvars.currentUser = req.session.currentUser;
  next();
});

Configuré una función de render

function renderer(file){  
  return function(req,res,next){
    res.render(file,{locals:req.localvars});
  }
}

luego para la función de enrutamiento

app.get('/',blah,blah,whatever,setSomeMoreLocalsHere,renderer(index.jade));

Puede haber algo mejor, pero es la mejor solución que he descubierto hasta ahora

La solución más fácil sería utilizar una función que devuelva un objeto local.

function(req) {
    return {
        currentUser: req.session.currentUser,
        /*all of my other locals*/
    };
}

res.render('anything.jade',{
  locals: defaultLocals(req)
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top