Question

J'utilise express nodejs, et essaie de garder mon point de vue rendu sec. Dans ma mise en page, j'ai quelque chose comme ce qui suit (j'utilise jade)

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

Le problème est que chaque fois que je rends, je suis maintenant nécessaire d'avoir

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

Il semble comme une douleur d'avoir à passer par tous mes rendu des appels et ajouter que, puis faire la même chose si je dois ajouter d'autres sections locales à la mise en page. Est-il un moyen de ne pas avoir à retaper « currentUser » dans les locaux partout où je rends

Était-ce utile?

La solution

Je sais que cette réponse est en retard, mais pour la postérité: si vous utilisez express, vous devez utiliser les aides dynamiques fournis, qui sont des fonctions auxiliaires vue accessibles qui prennent req,res comme arguments. Dans votre cas:

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

Ce qui signifie que votre point de vue pourrait maintenant appeler #{user}

Autres conseils

J'ai fini par faire ce qui suit:

Tout d'abord, je mis en place quelques variables locales

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

plus tard, je définirait des variables locales

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

Je crée une fonction render

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

alors pour la fonction de routage

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

Il pourrait y avoir quelque chose de mieux, mais il est la meilleure solution que j'ai pensé à ce jour

La solution serait plus facile d'utiliser une fonction qui retourne un objet habitants.

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

res.render('anything.jade',{
  locals: defaultLocals(req)
});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top