web-dev-qa-db-ja.com

Expressのapp.setとapp.engine

Node.jsチュートリアル をフォローしています。

よくわからない2行は次のとおりです。

app.set('view engine', 'html');
app.engine('html', hbs.__express);

ドキュメントapp.setを確認しましたが、次のように表示されます。

設定名を値に割り当てます。

しかし、私の質問は、これを使用することの関連性は何ですか。私はそれをグーグルで検索し、app.engineが使用されている場所ではどこでもapp.setが以前に呼び出されました。

app.setの前にapp.engineを使用することの重要性を教えてください。

[〜#〜]編集[〜#〜]

次の行を見つけましたが、テンプレートエンジンを初めて使用しているため、まだ不明です。

ただし、上記のview engineディレクティブを使用することで、HTMLファイルを動的として扱うようにExpressに指示できます。

20
Trialcoder

最初の行app.setは、使用するテンプレートエンジンをExpressに指示します。この場合はhtmlです。これには、その名前でインストールされたテンプレートエンジンがあり、このテンプレートエンジンが.html拡張子のファイルに責任があると感じる必要があります。

ejsを使用している場合、たとえば、この1行で十分です(ただし、通常、ビューファイルを検索するディレクトリを定義するapp.setへの2回目の呼び出しもあります)。

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

ここで、anotherファイル拡張子にテンプレートエンジンを使用したいとします。 ejsエンジンが.ejsファイルだけでなく、.htmlファイルも処理するようにします。

この場合、2行目を使用できます。これは、拡張子がhtmlのファイルの場合、ファイルをレンダリングするためにhbs.__express関数を呼び出すことをExpressに指示します(実際にはhtmlというテンプレートエンジンがないため)。これは基本的に、hbsエンジンで.htmlファイルをレンダリングすることを意味します。

__express関数は、Node.jsでのテンプレートエンジンのデファクトスタンダードであり、Expressと互換性があります。Expressが簡単に見つけられるように、レンダリング関数を呼び出す必要があります(名前が異なる場合は、これも構成しますが、それは別の話です)。

お役に立てれば。

42
Golo Roden