Handlebars是一种流行的模板引擎,为前端开发提供了一种构建HTML页面的方式。在本文中,我们将学习如何在Node.js和Express.js中使用Handlebars。
什么是Handlebars?
Handlebars为JavaScript提供了一种快速、灵活并且易于使用的语法,允许开发者创建渲染静态页面或动态数据的模板。Handlebars支持循环、条件语句以及嵌套模板,并允许开发人员创建自己的帮助函数。
安装依赖
首先,需要安装以下依赖:
handlebars
:Core Handlebars libraryexpress-handlebars
:Handlebars view engine for Express
可以通过以下命令进行安装:
npm install handlebars express-handlebars --save
将Handlebars设置为Express.js视图引擎
要在Express.js中使用Handlebars,需要将其设置为视图引擎。在app.js(或其他入口文件)中,添加以下代码:
const express = require('express'); const exphbs = require('express-handlebars'); const app = express(); app.engine('handlebars', exphbs()); app.set('view engine', 'handlebars');
这会将Handlebars添加到应用程序中的视图引擎列表中,并将默认引擎设置为Handlebars。
创建Handlebars模板
可以通过创建一个.handlebars或.hbs扩展名的文件来创建Handlebars模板。下面是一个简单的例子,演示如何使用内置的变量和块:
-- -------------------- ---- ------- --------- ----- ------ ------ ------------------------ ------- ------ -------------------- ----- --------- ------------------ -------- ----- ------------ ------- ------- -------
在上面的示例中,{{title}}
和{{heading}}
是变量,应该从JavaScript对象中获取。{{#if message}}...{{/if}}
是一个块,只有当message
存在并且不为空时才会呈现。
在Express.js中呈现Handlebars模板
要呈现Handlebars模板,在路由处理程序中调用res.render()方法,指定模板名称和要传递给模板的数据。下面是一个例子:
-- -------------------- ---- ------- ------------ -------- ----- ---- - ----- ---- - - ------ ------- -------- -------- -- -- --------- -------- ----- -- - --------- -- ------------------ ------ ---
在上面的示例中,我们将标题、标题和消息信息作为数据对象传递到Handlebars模板“home”中。res.render()
方法会自动查找views目录(默认配置),并呈现name参数指定的模板(无需包含文件扩展名)。 Handlebars将利用提供的数据对象将HTML页面构建并发送给客户端。
向Handlebars添加帮助函数
Handlebars支持添加自定义帮助函数以扩展其默认功能。下面是一个示例,演示如何添加一个名为uppercase
的自定义帮助函数:
const Handlebars = require('handlebars'); Handlebars.registerHelper('uppercase', function (str) { return str.toUpperCase(); });
在上面的示例中,我们使用registerHelper
方法来向Handlebars添加一个名为uppercase的帮助函数。然后,可以在模板中通过以下方式调用该函数:
{{uppercase myString}}
在上面的示例中,myString
是传递给帮助函数的参数。
结论
在本文中,我们介绍了如何在Node.js和Express.js中使用Handlebars模板引擎。我们讨论了
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/672d0e78ddd3a70eb6d9b8e5