Expressのバージョン3では、いくつかの機能が削除されました。
_the concept of a "layout" (template engine specific now)
partial() (template engine specific)
_
変更ログ: https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x
partial()
はinclude
と呼ばれるEJS独自の機能に変更できますが、レイアウトの代替は何ですか?
Express 3以降、レイアウト機能はテンプレートエンジンの責任に委ねられているようです。レイアウトにはejs-locals( https://github.com/RandomEtc/ejs-locals )を使用できます。
Ejs-localsをインストールする
npm install ejs-locals --save
App.jsのアプリエンジンとしてejs-localsを使用する
var express = require('express');
var engine = require('ejs-locals');
...
app.engine('ejs', engine);
app.set('view engine', 'ejs');
これでレイアウトを使用できます
layout.ejs
<body>
<%- body %>
</body>
index.ejs
<% layout('layout') -%>
<div class="container">
<div class="jumbotron">
...
別のオプションは、express-partials( https://github.com/publicclass/express-partials )を使用することです。 2つは同じことをするので、それはあなたの選択です。
私もこれで苦労しました。そこで、ejsとdustjsの例を含むgithubプロジェクトを作成しました。
https://github.com/chovy/express-template-demo
パーシャルとインクルードの違いはわかりません。明示的にデータをインクルードに渡す必要はありません。なぜパーシャルが欲しいのかわからない。
ただし、レイアウトの場合は、次のようにブロックを指定するだけです。
//layout.ejs
<html>
<%- body %>
</html>
//page1.ejs
<% layout('layout') -%>
This is loaded from page 1 and overrides <%- body %> in the layout.ejs.
他の例を追加したい場合は、プルリクエストを送信してください。
「include」オプションを使用して、Express 2.xのEJSレイアウトを模倣できます。ここで私の答えを見てください: