没有布局的 Express 4 车把渲染

Express 4 handlebars render without layout

Express 4 应用程序中是否有一种方法可以在不使用布局的情况下呈现视图?

我在项目里面有一个layout.hbs。该文件似乎无需在任何地方注册就可以使用,并且对于大多数视图来说都可以,但是如果只需要渲染一个视图怎么办?

假设您使用的是 express-handlebars,您可以在调用 render 方法时指定与 route/controller 不同的布局。要完全摆脱布局,您可以将布局设置为 false

router.get('/', function(req, res) {
    res.render('home', {layout: false});
});

https://github.com/ericf/express-handlebars#layouts

应该清楚,当您有数据要呈现时,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 })
});

For more congiguration of express-handlebars

如果您使用 app.render() 函数渲染 html。 你很适合 。 正如 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);
   });
 });
}

这对我有 1 个没有 main.handlebars 布局的页面有效:

  1. 向数据对象添加布局错误:
object.layout=false;
  1. 渲染
res.render('page', object);

.layout 添加到现有对象可以让您轻松地传递对象数据。