问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Node.js 系列 - 使用 EJS 模板引擎

发布网友 发布时间:2024-09-17 07:13

我来回答

1个回答

热心网友 时间:2024-09-29 18:07

在这一节,我们尝试使用 EJS 模板引擎让 Node.js 渲染动态页面。

在说什么是「模板引擎」之前,请先思考一个问题:我们之前响应给客户端的都是静态 HTML 页面,也就是内容都是写死的。但平时我们看到的网页大多内容都是变动的,根据数据的不同内容也随之改变。很明显不能靠人力去实时更改 HTML 文件。那么该怎么让 HTML 页面去动态改变内容呢?

你应该能想到在前端用 JavaScript 代码去根据数据动态生成页面内容。这的确是个好办法,但也有两个明显缺陷:因为浏览器先加载了一个内容不完全的页面,然后用 JavaScript 获取数据渲染页面内容。这样的话,当搜索引擎想抓取页面解析 HTML 内容的时候,JavaScript 代码还未被调用,页面内容还没被生成。这会影响到 SEO。页面在刚刚加载之后,用户还要等一个 JavaScript 代码执行时间,一个数据请求时间,一个 DOM 渲染时间,这增加的等待时间,可能会让用户体验打折扣。

「模板引擎」让表现层(HTML 文档)和业务数据分离。通过特定的语法,来动态地用数据渲染出 HTML 文档。

通过使用模板引擎就可以解决刚刚提到的问题。HTML 文档在服务器用模板引擎根据数据动态地渲染好。然后直接将渲染完整的页面响应给客户端。浏览器加载完页面内容可以立即展示,也可以减少显示页面所花的时间。

在这一篇里,我要介绍的是「EJS 模板引擎」它是 "Embedded JavaScript" 的缩写,通过在 HTML 文件内使用 JavaScript 代码语法来进行 HTML 模板渲染。Node.js 支持模板引擎有非常多,之所以选择讲 EJS,是因为个人觉得它上手最快,可以在不破坏 HTML 文档结构的情况下,直接在标签内书写 JavaScript 代码。对于前端开发人员来说学习成本很低。

简单来说,EJS 用起来非常简单,你只要像之前写 HTML 代码一样去写就好了。只要最后文件后缀名改成.ejs 那这就是一个 EJS 模板文件了。在模板中,`` 括起来的内容会作为 JavaScript 代码来编译,`` 将括起来的变量中的数据渲染到模板。``,变量值若包含 '', '&' 等字符会被转义。``,变量值是什么就输出什么。

当然除了上面讲的标签之外还有其他的,但这里我就不多做介绍了,大家可以自行查阅 文档。

让我们再来看另一个例子:如果我传入变量state = 'danger',页面应该如下图。

在 Node.js 中渲染页面,首先,还是要安装 ejs 模块:之后我们根据数据和模板来渲染页面。ejs 模块提供多种方法实现,但这里我们先只介绍 `ejs.renderFile` 函数。前面的第一个 EJS 模板例子在服务器的调用代码为:

有很多时候一个网站的不同页面里有一些部分是相同的,比如下面这些例子:这些内容在网站中的不同页面里重复出现。如果在每一个 HTML 文件里都重新写一遍,很明显是低效率地 "笨" 行为。而且如果日后需要更改内容,你总不能一个文件一个文件地去改吧。

我们可以将这些通用的组件提炼出来作为 "模板片段"。

在 EJS 模板中,通过 `include` 指令可以将其他的模板片段引入到当前模板。

例如,如果我有 "./index.ejs" 和 "./header.ejs" 两个模板文件,我可以通过 `` 代码让 header.ejs 被 index.ejs 引入。

大多数情况下,我们需要使用能够输出原始内容的标签 `<%-` 在 include 指令上,避免对输出的 HTML 代码做转义处理。

现在来让我们看一个实例。假如我要做一个个人介绍网页,它包含:关于我,项目介绍,个人博客,三个页面。每个页面都包含一个代码相同的header 元素:那么我们就可以把这段代码提取出来,单独作为一个模板片段,取名 common-header.ejs。之后在各个页面中引入:为了管理方便,我把所有的 EJS 模板放在了 views 目录,把模板片段放在了 views 目录下的 templates 目录:HTTP 服务器路由代码如下:服务器运行起来,在浏览器里访问网站,效果如下:在每个页面上,common-header.ejs 模板片段都被引入了。代码的复用性,简洁性都得到了提高。好啦,今天的分享就告一段落啦。在下一篇,我会介绍如何使用 MongoDB 数据库。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
什么时间试排卵纸最佳 排卵第十天排卵试纸弱阳怎么回事 手机app下载课后帮 课后帮点击了家长怎么改成学生的 课后帮绑定学生后还能绑定家长吗 课后帮怎么注册 课后帮注册教程 癫痫急救的正确方法 癫痫持续状态的抢救要点 小儿癫痫发作的急救措施 癫痫病急救常识有哪些要点 如何让表格中的数字以万位单位显示? 梦见出殡队伍一直叫我儿子的名字 引蛇出洞的方法有哪些? 怎样驱蛇最简单最有效? 会务服务包括哪些 如何驱赶蛇类? 会议服务包括哪些内容 金湖县地方风俗 淮安有哪些做蟹黄汤包正宗的餐厅推荐? “一套”用英语怎么说? 办理房子公证是什么意思 高德地图如何录制好声音? 华硕A45VM触控板不知道装那个怎么办?在计算机属性设备管理也查不出来... 多彩M128GB多点触控鼠标重要参数 锋尚n2m的多触控怎么设置? 雪燕炖多久最好 雪燕煮多久 雪燕的10种最佳吃法 1、左膝关节外侧半月板前角损伤可疑;2、左膝关节少许积液”,请问这个结 ... 半月板损伤敷什么膏药 膝盖积液热敷还是冷敷 mini-koa-template-cli实现 高级技师和高级职称的对比有哪些? 超全外贸流程一览表!速看收藏! ...收到货后卖相挺满意的,但是感觉用着就是不怎么顺手,用安 ...不回怎么办?外贸人催回催款催单表情包,让客户回复率直接飞起!_百度... 苹果手机无法开机了,能恢复里面的数据吗 苹果手机停用了怎样连接电脑恢复系统啊? 张裕葡萄酒产地在哪?张裕葡萄酒怎么样 张裕葡萄酒产地在哪?张裕红酒什么档次 幼儿园科学区材料有哪些 大班科学区有哪些材料 科学区材料有哪些 5元一个月香港云服务器真的存在吗? 微博怎样取消关注别人呢? 云服务器是怎样的一种服务? 高中必背英语单词3500还是3600 高中英语四级够吗 ...14/16 和 M3 Mac Mini 的发布推迟到明年,苹果有何考量? 苹果会出mini6吗 苹果有多少mini系列的手机吗