Express 4アプリで、レイアウトを使用せずにビューをレンダリングする方法はありますか?
プロジェクト内にlayout.hbsがあります。ファイルはどこにでも登録する必要なく使用されているようで、ほとんどのビューで問題ありませんが、単一のビューだけをレンダリングする必要がない場合はどうなりますか?
Express-handlebarsを使用していると想定すると、renderメソッドを呼び出すときに、ルート/コントローラーとは異なるレイアウトを指定できます。レイアウトを完全に取り除くには、レイアウトをfalse
に設定します。
router.get('/', function(req, res) {
res.render('home', {layout: false});
});
app.render()
関数を使用してHTMLをレンダリングする場合。あなたは Rayanの答え で行くのが良いです。 Express documentation 自体に言及しているように、res.render()
メソッドも内部でapp.render()
メソッドを使用します。
const app = require('express')();
app.set('view engine', 'hbs');
/**
* Render email template with data
*
* @param {String} emailTemplate email template path
* @param {Object} renderParams Render parameters
* @return {Promise} rendered template
*/
async function renderEmail(emailTemplate, renderParams) {
const renderParams = { layout: false, ...otherRenderParams };
return await new Promise((resolve, reject) => {
app.render(emailTemplate, renderParams, function (err, html) {
if (err) return reject(err);
return resolve(html);
});
});
}
レンダリングするデータがある場合、layout
はそのようなデータの追加のプロパティにすぎないことを明確にする必要があります
var data = {
layout: false,
var1: var1,
var2: var2
};
res.render('home', data);
レイアウトを指定したくない場合は、layout: false
と指定する必要があります。そうしないと、アプリがクラッシュします。必要に応じて、次のように構成できます。
app.get('/', (req, res, next) => {
res.render('shop', { title: 'My Shop', layout: false })
});