web-dev-qa-db-ja.com

すべてのルートに渡さずにメインハンドルバーレイアウトの変数を設定するにはどうすればよいですか?

Nodejsとexpressでハンドルバーを使用しています。これは私のmain.handlebarsファイルです:

<!doctype html>
<html>
    <head>
        ...
    </head>
    <body>
        <div class ="container">
            ...
            <footer>
                &copy; {{copyrightYear}} Meadowlark Travel
            </footer>
        </div>
    </body>
</html>

これまでのところ、私はすべてのルートに著作権年を渡します。

var date = new Date();
var copyrightYear = date.getFullYear();

app.get(
    '/',
    function( req, res) {
        res.render(
            'home',
            {
                copyrightYear: copyrightYear
            }
        );
    }
);

copyrightYear変数をグローバルに設定することは可能ですか?そのため、すべてのルート/ビューに渡す必要はありませんか?

17
mles

ExpressJSは、ある種の「グローバル変数」を提供します。それらはドキュメントで言及されています: app.locals 。すべての応答にそれを含めるには、次のようなことを行うことができます。

app.locals.copyright = '2014';
16
staaar

この場合、代わりにハンドルバーヘルパーを作成することもできます。このような:

var Handlebars = require('handlebars');

Handlebars.registerHelper('copyrightYear', function() {
  var year = new Date().getFullYear();

  return new Handlebars.SafeString(year);
});

テンプレートでは、以前と同じように使用します。

&copy; {{copyrightYear}} Meadowlark Travel
7
gnowoel

express-handlebarsの使用は、少し異なります。

var handlebars = require('express-handlebars').create({
    defaultLayout:'main',
    helpers: {
        copyrightYear: function() {
            return new Date().getFullYear();
        },
    }
});
3
Daniel