2016-03-23 24 views
3

ile otomatik olarak görüntülemeye geçirin. Her istekte ekspres kullanarak bir görünüme otomatik olarak geçiş yapmanın bir yolunu arama.Değişken değişkeni, middleware

Bu middleware'i başlangıç ​​betiğimde kullanıyorum, temelde görünümde çıkardığım bir dizi stil sayfası var.

app.use(function(req, res, next) { 
    req.styles = helper.getStylesForPage(req.originalUrl); 
    next(); 
}); 
sayfa oluşturulurken

Sonra kullanabilirsiniz:

router.get('/', function(req, res, next) { 
    res.render('index', { 
     styles: req.styles 
    }); 
}); 

Ne aradığım bu değer otomatik muhtemelen görünüme geçirilen bu nesnenin konması için bir yoldur middleware fonksiyonunda, her rotada manuel olarak yapmak zorunda değilim.

+0

Bunu zaten yapmıyor musunuz? _ "otomatik olarak, bu durumda orta katman işlevinde görülebilen bu nesneye otomatik olarak konulabilmesi için her rotada manuel olarak yapmak zorunda kalmam." _, ilk kod parçacığı bunu yapıyor gibi görünüyor. – diegoaguilar

+0

@diegoaguilar, "req" nesnesine yerleştirilir, yani ikinci kod örneğindeki görünüme otomatik olarak konan nesneye koyarım. – ncf

+0

Jade kullanıyor musunuz? – diegoaguilar

cevap

3

Bunu çözdüm, res.locals kullanabiliyorum. Eğer res.locals, bu nesne sizin görünümde maruz nedir farkında değilse, bir not olarak

app.use(function(req, res, next) { 
    res.locals.styles = helper.getStylesForPage(req.originalUrl); 
    next(); 
}); 

ve esasen bu aynı şeyi yapıyor: Sadece benim katman işlevi açık

router.get('/', function(req, res, next) { 
    res.render('index', { 
     styles: helper.getStylesForPage(req.originalUrl) 
    }); 
}); 

Tek fark, yeniden kullanılabilir bir orta sınıf işlevinde olmasıdır, bu yüzden şimdi her rotaya koymak zorunda değilim.

+0

Jade'de global 'res.locals' kullanabilir misiniz? : o – diegoaguilar

+0

Çalışıyor görünüyor: D. [Bu cevap] 'a bakın (http://stackoverflow.com/a/24072444/1426177), anlamamı sağladı. – ncf

+0

Awesome! :) Ben bile bilmiyordum;) – diegoaguilar