2016-07-20 4 views
1

私はExpressとPugを使用する控えめな小さなサイトを持っています。すべてのページには、userパラメータから描画されたユーザーの名前を含むナビゲーションバーがあり、そのページの主なコンテンツはdataパラメータを使用します。メインコンテンツは、ルートテンプレートを拡張するテンプレートからレンダリングされます。どちらも、適切にレンダリングするために独自のパラメータが必要です。エクスプレス:各ハンドラで部分的にレンダリングしますか?

各ハンドラでビューを部分的にレンダリングする方法はありますか?

var app = require('express')() 
app.set('view engine', 'pug') 

app.get('/', (req, res, next) => { 
    var userdata = '...' 
    req.render('/index', {user: userdata} 
    next() // the request is for /page 
}) 

app.get('/page', (req, res, next) => { 
    var moredata = '...' 
    req.render('./page/index', {data: mroedata}) 
}) 

答えて

1

それができないのですが、代替として、あなたは似た何かを達成するためにres.localsを使用することができます私の知る限り:

let userMiddleware = (req, res, next) => { 
    let userdata = '...'; 
    res.locals.user = userdata; 
    next(); 
}); 

app.use(userMiddleware); 

// This can stay the same: 
app.get('/page', (req, res, next) => { 
    var moredata = '...' 
    req.render('./page/index', {data: mroedata}) 
}) 

これはあなたのすべてのテンプレートにuser変数が利用できるようになりますミドルウェアです、あなたが望むのは私のようだ。

の代わりにグローバルに適用する、あなたはまた、特定のルートのためにそれを使用することができます。

app.get('/page', userMiddleware, (req, res) => ...); 
関連する問題