Express アプリは EJS を使用しており、views ディレクトリは次のようになっています。
./views
./contents
home.ejs
./includes
header.ejs
footer.ejs
layout.ejs
contents
routes/index.js で名前が付けられたローカル変数に基づいて、条件付きで layout.ejs ビューに home.ejs をロードしようとしています。そのファイルは次のようになります。
/*
* GET home page.
*/
exports.index = function(req, res){
res.render('index', { title: 'Home', contents: 'home.ejs' });
};
理想的には、(layout.ejs で) 単純に次のように記述できます。
<% include '/contents' + contents %>
末尾の「contents」は、ロードする本文テキストへの相対パスを含むローカル変数です。
しかし残念なことに、EJS はinclude
ディレクティブに続くテキストを常に文字どおりに解釈するようであり、補間魔法が起こる可能性はありません。
私も無駄にしようとしました:
<% function yieldContent(contents){ %>
<% var contentPath = 'contents/' + contents; %>
<% include contentPath %>
<% }; %>
<% loadContent(); %>
ルートで渡された変数に基づいて条件付きでビューを含めるための創造的なソリューションを持っている人はいますか?