2012-12-22 16 views
8

Chciałbym wiedzieć, czy istnieje wbudowany sposób rozszerzania funkcji res.render Express.js, ponieważ chciałbym przekazać domyślny zestaw "locals" "do każdego renderowanego szablonu. Obecnie mam napisane małym middleware, który używa underscore.js na funkcję przedłużenia scalić domyślnego „mieszkańcami” i te specyficzne dla danego szablonu:Node.js - program pośredniczący Expressjs rozszerzający res.render

app.use(function(req, res, next){ 
    res.render2 = function (view, locals, fn) { 
     res.render(view, _.extend(settings.template_defaults, locals), fn); 
    }; 
    next(); 
}); 

Czy istnieje lepszy sposób to zrobić?

+0

czym jesteś próbować zrobić? –

Odpowiedz

7

app.locals jest prawdopodobnie to, czego szukasz:

app.locals(settings.template_defaults); 

Wraz z res.locals i res.render, Express jest już zdolny do łączenia wartości dla Ciebie:

// locals for all views in the application 
app.locals(settings.template_defaults); 

// middleware for common locals with request-specific values 
app.use(function (req, res, next) { 
    res.locals({ 
     // e.g. session: req.session 
    }); 
    next(); 
}); 

// and locals specific to the route 
app.get('...', function (req, res) { 
    res.render('...', { 
     // ... 
    }); 
}); 
+0

To 'res.locals', chociaż link jest w porządku (nie można edytować 1 symbolu). – elmigranto

+0

Dzięki @ Jonathan Lonowski to dokładnie to, czego potrzebowałem! – TechplexEngineer

+0

Więcej informacji: http://expressjs.com/api.html#app.locals – TechplexEngineer

3
res.locals or app.locals is for this exact purpose. 
Powiązane problemy