2016-03-23 6 views
3

リクエストごとにexpressを使用して、値をビューに自動的に渡す方法を検索します。ミドルウェアを使用して変数を自動的にビューに渡す

私はスタートアップスクリプトでこのミドルウェアを使用しています。このミドルウェアは基本的にビューで出力するスタイルシートの配列を取得します。私が探している何

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

は自動的にビューに渡された、このオブジェクトに入れることには、この値のための方法である、おそらく:ページをレンダリングするとき、私はそれを使用することができます

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

ミドルウェア機能では、すべてのルートで手動で行う必要はありません。

+0

あなたはまだそれをやっていませんか? _ "を自動的にこのオブジェクトに入れて、ビューに渡します。おそらくミドルウェアの機能のため、すべてのルートで手動で行う必要はありません。" _、最初のコードスニペットがそうするようです。 – diegoaguilar

+0

@diegoaguilarまあ、それは 'req'オブジェクトに入れられています。つまり、2番目のコードサンプルのビューに渡されたオブジェクトに自動的に配置されます。 – ncf

+0

玉を使用していますか? – diegoaguilar

答えて

3

私はそれを理解しました。それはres.localsを使用することができます。あなたはres.localsが何であるかを認識していない場合、このオブジェクトはビューで公開され、追記として

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

、そして本質的にこれと同じ事やっている:私はちょうどに私のミドルウェア機能を切り替え

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

唯一の違いは、再利用可能なミドルウェア機能であることです。そのため、今はすべてのルートに配置する必要はありません。

+0

Jadeでグローバルな 'res.locals'を使用できますか? :o – diegoaguilar

+0

それは働いているようです:D。 [この回答](http://stackoverflow.com/a/24072444/1426177)を参照してください、それは私の理解に役立ちました。 – ncf

+0

恐ろしい! :)私はそれを知りませんでした;) – diegoaguilar

関連する問題