ホームページ > 記事 > ウェブフロントエンド > NodeJSフレームワークExpressのテンプレートビュー機構の解析
この記事では主に NodeJS フレームワーク Express のテンプレート ビュー メカニズムの分析を紹介します。これを必要とする友人に共有します。
MVC モデルについても説明します。この記事では、Express フレームワークのテンプレートとビュー (V) に関連する機能を紹介します。
Express は多くのテンプレート エンジンをサポートしており、一般的に使用されるものは次のとおりです:
haml 実装 Haml
haml.js の後継、および ExpressJade のデフォルトのテンプレート エンジン
Coffeeup
次に、Jade エンジンを使用して、index.html をレンダリングします。layout:false を設定していないため、index.jade のレンダリングされたコンテンツは、body ローカル変数としてlayout.jade に渡されます。
<SPAN style="FONT-SIZE: 13px">app.get('/', function(req, res){ res.render('index.jade', { title: 'CSSer, 关注Web前端技术!' }); }); </SPAN>新しい「ビュー エンジン」設定では、デフォルトのテンプレート エンジンを指定できます。jade を使用したい場合は、次のように設定できます:
<SPAN style="FONT-SIZE: 13px">app.set('view engine', 'jade'); </SPAN>そのため、次のメソッドの代わりに
<SPAN style="FONT-SIZE: 13px">res.render('index'); </SPAN>を使用できます。メソッド:
<SPAN style="FONT-SIZE: 13px">res.render('index.jade'); </SPAN>When 「ビュー エンジン」を設定すると、テンプレート拡張機能がオプションになり、複数のテンプレート エンジンを組み合わせて一致させることもできます:
<SPAN style="FONT-SIZE: 13px">res.render('another-page.ejs'); </SPAN>Express は、各ビューのレンダリング後に適用されるビュー オプション設定も提供します。レイアウトを頻繁に使用しない場合は、次のように設定できます:
<SPAN style="FONT-SIZE: 13px">app.set('view options', { layout: false }); </SPAN>必要に応じて、これらの設定は後続の res.render() 呼び出しでオーバーライドできます:
<SPAN style="FONT-SIZE: 13px">res.render('csser-view.ejs', { layout: true }); </SPAN>path システムのデフォルトを置き換えるには、たとえば、「ビュー エンジン」を jade に設定し、「./views/mylayout.jade」という名前のレイアウトをカスタマイズする場合、次のように使用できます:
<SPAN style="FONT-SIZE: 13px">res.render('page', { layout: 'mylayout' }); </SPAN>それ以外の場合、拡張子は次のようにする必要があります。指定:
<SPAN style="FONT-SIZE: 13px">res.render('page', { layout: 'mylayout.jade' }); </SPAN>これらのパスは絶対パスにすることもできます:
<SPAN style="FONT-SIZE: 13px">res.render('page', { layout: __dirname + '///www.jb51.net/mylayout.jade' }); </SPAN>これのより良い例は、カスタム ejs テンプレートの開始タグと終了タグです:
<SPAN style="FONT-SIZE: 13px">app.set('view options', { open: '{{', close: '}}' }); </SPAN>部分ビュー
Express ビュー システムは、部分ビューとコレクション ビューをネイティブにサポートします。ミニビューは、主にドキュメントのフラグメントをレンダリングするために使用されます。たとえば、ビュー内のコメントをループする代わりに、部分コレクションを使用します。
<SPAN style="FONT-SIZE: 13px">partial('comment', { collection: comments }); </SPAN>
他のオプションやローカル変数が必要ない場合は、オブジェクトを省略して、単純にコメント配列を渡すことができます。これは同じです。上記の例のように:
<SPAN style="FONT-SIZE: 13px">partial('comment', comments); </SPAN>
ローカル コレクションを使用する場合、いくつかの「マジック」ローカル変数がサポートされます:
渡された (または生成された) ローカル変数が優先されますが、親ビューに渡されたローカル変数は子ビューでも引き続き有効です。したがって、partial('blog/post', post) を使用してブログ ログをレンダリングすると、post のローカル変数が生成されますが、この関数を呼び出すビューにはローカル ユーザーが存在し、ブログ内では引き続き有効です。 /ポストビュー。 (最初の注: この翻訳には何か問題があります。アドバイスをお願いします。)
パフォーマンスのヒント: 部分コレクションを使用して長さ 100 の配列をレンダリングする場合、単純なコレクションの場合は、部分コレクションを使用する代わりにループをインライン化することができ、システムを削減できます。オーバーヘッド。
ビューのルックアップは、「views/user/list.jade」という名前のページビューがあるとします ('edit')。 )、ビュー システムは「views/user/edit.jade」を検索してロードしようとしますが、partial('.. /messages') は「views/messages.jade」をロードします。
ビュー システムはインデックス テンプレートもサポートしているため、同じ名前のディレクトリを使用できます。たとえば、ルート内で res.render('users') を実行します。これは、「views/users.jade」または「views/users/index.jade」を指します。
上記のインデックスビューを使用する場合、partial('users') を通じて同じ名前のディレクトリから "views/users/index.jade" を参照でき、ビューシステムは "../users/" を試行します。これにより、partial('index') を呼び出す必要性が減ります。
上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。
関連する推奨事項:
SpringBootとVue.jsでフロントエンドとバックエンド分離のファイルアップロード機能を実現
以上がNodeJSフレームワークExpressのテンプレートビュー機構の解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。