[解決済み] Express / Node.JSを使用してすべてのビューでアクセス可能なグローバル変数を作成する方法は?
質問
さて、私は
ジキル
とファイル内の変数を定義することができます
_config.yml
これは、すべてのテンプレート/レイアウトでアクセス可能です。私は現在
Node.JS
/
エクスプレス
と
EJS
テンプレートと
ejs-locals
(パーシャル/レイアウト用。のようなグローバル変数と同じようなことをしたいと思っています。
site.title
にある
_config.yml
誰もがJekyllに精通している場合。 私はサイトのタイトル、(むしろページタイトル)、著者/会社名のような変数を持っている、それは私のすべてのページで同じままです。
ここでは、私が現在やっていることの例です...:
exports.index = function(req, res){
res.render('index', {
siteTitle: 'My Website Title',
pageTitle: 'The Root Splash Page',
author: 'Cory Gross',
description: 'My app description',
indexSpecificData: someData
});
};
exports.home = function (req, res) {
res.render('home', {
siteTitle: 'My Website Title',
pageTitle: 'The Home Page',
author: 'Cory Gross',
description: 'My app description',
homeSpecificData: someOtherData
});
};
サイトのタイトル、説明、著者などの変数を一箇所で定義し、EJSを通してレイアウトやテンプレートにアクセスできるようにしたいのですが、その際、オプションとして
res.render
. これを行うには、各ページに固有の他の変数を渡すことを可能にする方法がありますか?
どのように解決するのですか?
このページでは
Express 3 API リファレンス
を実行すると、探していたものが見つかりました。具体的には、以下のエントリです。
app.locals
そして、もう少し下の方にある
res.locals
は、私が必要としている答えを持っていました。
私は自分で発見したのです、関数
app.locals
はオブジェクトを受け取り、そのすべてのプロパティをアプリケーションにスコープされたグローバル変数として保存します。これらのグローバルは、各ビューにローカル変数として渡されます。この関数は
res.locals
しかし、関数はリクエストにスコープされているため、レスポンスのローカル変数はその特定のリクエスト/レスポンス中にレンダリングされたビューにのみアクセス可能です。
ですから、私の場合
app.js
を追加しました。
app.locals({
site: {
title: 'ExpressBootstrapEJS',
description: 'A boilerplate for a simple web application with a Node.JS and Express backend, with an EJS template with using Twitter Bootstrap.'
},
author: {
name: 'Cory Gross',
contact: '[email protected]'
}
});
そして、これらの変数はすべて、ビューで
site.title
,
site.description
,
author.name
,
author.contact
.
また、リクエストに対する各レスポンスに対してローカル変数を定義するために
res.locals
として、ページのタイトルのような変数を渡すこともできます。
options
パラメータとして渡すこともできます。
render
を呼び出します。
EDITです。
この方法は
ではなく
を使用すると、ミドルウェアでこれらのローカルを使用することができます。私は実際に、下のコメントでPickelsが提案しているように、このことに遭遇しました。この場合、彼の別の回答(感謝)にあるようなミドルウェア関数を作成する必要があります。あなたのミドルウェア関数は、それらを
res.locals
に追加し、各レスポンスに対して
next
. このミドルウェアの関数は、これらのローカルを使用する必要がある他のミドルウェアの上に配置する必要があります。
EDITです。
ローカルを宣言する際のもう一つの違いは
app.locals
と
res.locals
は
app.locals
では、変数は一度だけ設定され、アプリケーションの実行中はずっと保持されることです。でローカルを設定すると
res.locals
でローカルを設定すると、これらはリクエストを受けるたびに設定されます。基本的には、グローバル変数の設定は
app.locals
を通して設定することをお勧めします。
req
変数に依存する場合を除きます。もし値が変化しないのであれば、その値を一度だけ
app.locals
.
関連
-
[解決済み】ExpressJSとMeteorJSの比較【終了しました
-
[解決済み] S3 Bucket に何かを送信しようとすると、AWS Missing credentials が表示される (Node.js)
-
[解決済み] Node.js上のExpress.jsでGET(クエリ文字列)変数を取得する方法とは?
-
[解決済み] Node.jsでディレクトリに存在するすべてのファイル名のリストを取得する方法は?
-
[解決済み] Node.jsを使用してディレクトリが存在しない場合に作成する方法
-
[解決済み] Node.JSを使用して、JSONファイルを(サーバー)メモリに読み込むにはどうすればよいですか?
-
[解決済み] Node.jsで "Cannot find module "エラーを解決するにはどうしたらいいですか?
-
[解決済み] node.jsでJSONをpretty-printするにはどうしたらいいですか?
-
[解決済み】Node.jsとExpressを使用してPOSTするときに、リクエストボディにアクセスするにはどうすればよいですか?
-
[解決済み】Node.jsのグローバル変数
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] エラー: nodejs の get 呼び出しで getaddrinfo ENOTFOUND が発生しました。
-
[解決済み】Google spreadsheet api Requestに不十分な認証スコープがあった。
-
[解決済み】モジュール 'internal/util/types' が見つかりません。
-
[解決済み】エラー TRK0005: 位置特定に失敗しました。"CL.exe"
-
[解決済み] 非推奨パッケージに関するNPM警告メッセージ
-
[解決済み】ENOENT, そのようなファイルまたはディレクトリがありません。
-
[解決済み】Mongooseで、日付でソートするにはどうしたらいいですか?(node.js)
-
webpack ENOENTソリューションの起動
-
[解決済み] Expectアサーションの型エラー -> expect(...).toExistは関数ではない
-
[解決済み] Node.jsのデプロイメント設定/構成ファイルを保存する方法は?