Tarir la population locale mise en page express.js rendu
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
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)
});