快递4应用中有没有办法在不使用布局的情况下渲染视图?
我在项目中有一个layout.hbs。该文件似乎无需在任何地方注册即可使用,对于大多数视图来说都可以,但是如果只需要渲染一个视图呢?
答案 0 :(得分:36)
假设您正在使用快速把手,则可以在调用render方法时指定与路径/控制器不同的布局。要完全摆脱布局,可以将布局设置为false
。
router.get('/', function(req, res) {
res.render('home', {layout: false});
});
答案 1 :(得分:0)
应该很清楚,当您要渲染数据时,layout
应仅仅是此类数据的额外属性
var data = {
layout: false,
var1: var1,
var2: var2
};
res.render('home', data);
答案 2 :(得分:0)
如果您不想给出布局,则必须指定为layout: false
。否则应用程序将崩溃。您可以根据需要进行以下配置。
app.get('/', (req, res, next) => {
res.render('shop', { title: 'My Shop', layout: false })
});
答案 3 :(得分:0)
如果您正在使用app.render()
函数来呈现html。
您可以选择Rayan's answer。
正如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);
});
});
}
答案 4 :(得分:0)
这对我来说有 1 个没有 main.handlebars
布局的页面:
object.layout=false;
res.render('page', object);
将 .layout
添加到现有对象允许您仍然轻松地传递对象数据。