レンダリング変数:app.localsおよびres.locals
Render Variables App
上記のテンプレートでは、ブログ、ユーザー、成功、およびエラーの変数を使用しました。ブログ変数をapp.locals
にマウントしました次に、ユーザーのマウント、成功、エラーをres.locals
下。なぜそうするのですか?app.locals
res.locals
でそれは何ですか?それらの違いは何ですか?
テンプレートのレンダリングに使用できるExpressのオブジェクトは2つあります:app.locals
res.locals
で。エクスプレスソースコードを見てみましょう。
express / lib / application.js
app.render = function render(name, options, callback) { ... var opts = options var renderOptions = {} ... // merge app.locals merge(renderOptions, this.locals) // merge options._locals if (opts._locals) { merge(renderOptions, opts._locals) } // merge options merge(renderOptions, opts) ... tryRender(view, renderOptions, done) }
express / lib / response.js
res.render = function render(view, options, callback) { var app = this.req.app var opts = options || {} ... // merge res.locals opts._locals = self.locals ... // render app.render(view, opts, done) }
見ることができます:通話中res.render
その時点で、expressは3つの場所の結果をマージし、レンダリングされるテンプレートを渡します。優先順位は次のとおりです:res.render
着信オブジェクト> res.locals
オブジェクト> app.locals
オブジェクト、そうapp.locals
res.locals
でほとんど違いはありません。テンプレートのレンダリングに使用されます。使用方法の違いは次のとおりです。app.locals
通常、一定の情報(ブログ名、説明、作成者情報など)がマウントされます。res.locals
通常、変数情報はマウントされます。つまり、可能な値はリクエストごとに異なります(リクエスター情報、res.locals.user = req.session.user
など)。
index.jsを変更しますroutes(app)
次のコードを前の行に追加します。
/ / Set the template global constant app.locals.blog = { title: pkg.name, description: pkg.description } // Add the three variables required for the template app.use(function (req, res, next) { res.locals.user = req.session.user res.locals.success = req.flash('success').toString() res.locals.error = req.flash('error').toString() next() })
これはres.render
と呼ばれますこれらの4つの変数を渡す必要はなく、Expressは自動的にマージしてテンプレートを渡すので、これらの4つの変数をテンプレートで直接使用できます。