8

Express.js の res.render 関数を拡張する方法が組み込まれているかどうかを知りたいのですが、レンダリングされるすべてのテンプレートにデフォルトの「ローカル」セットを渡したいからです。現在、underscore.js の拡張機能を使用して、デフォルトの「ローカル」とそのテンプレートに固有のものをマージする小さなミドルウェアを作成しました。

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

これを行うより良い方法はありますか?

4

2 に答える 2

7

app.localsおそらくあなたが探しているものです:

app.locals(settings.template_defaults);

と に加えres.localsres.render、Express はすでに値をマージすることができます。

// 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('...', {
        // ...
    });
});
于 2012-12-22T07:19:39.310 に答える
3
res.locals or app.locals is for this exact purpose.
于 2012-12-22T05:06:02.613 に答える