index.ejs与index.html

EJS是一个高效的嵌入式JavaScript模板引擎。

HTML是什么?

HTML(超文本标记语言)用于设计网页的结构及其内容。从技术上讲,HTML 实际上不是 C++、JAVA 或 python 等编程语言。它是一种标记语言,它最终向浏览器提供声明性指令。加载网页时,浏览器首先读取 HTML 并从中构造 DOM(文档对象模型)树。 HTML 由一系列元素组成。

EJS是什么?

EJS 仅代表嵌入式 JavaScript。它是一种简单的模板语言或引擎。 EJS 有自己定义的语法和标签。它提供了一种更简单的动态生成 HTML 的方法。

为什么需要使用模板引擎?

如果服务器以静态HTML+JS渲染的方式将页面发送至客户端,那么加载、渲染的时间会让用户体验大打折扣。模板引擎将HTML文档与业务数据分离,通过特定语法动态渲染出HTML,再将渲染后的页面相应给客户端,浏览器加载完立即展示,减少在客户端渲染的时间。

为什么用EJS?

EJS可以在不破坏HTML文档结构的情况下直接在标签内书写JS代码,可以保持明确的、维护性良好的HTML代码结构。在用法上更简单,直接像写HTML代码一样去写就好了,只是文件的后缀不再是.html,而是.ejs。这样的.ejs文件就是模板文件了。将模板字符串和数据作为参数传给EJS文件,HTML就出来了。

吐槽:EJS官方文档写的跟shit一样,对小白很不友好,有基础的除外。

参考一下原生JS渲染的写法(古早)

1
2
3
4
5
6
7
8
9
10
11
12
<div id="scan"></div>
<script>
//原生JS渲染HTML字符串
var names = ['炭之郎', '祢豆子', '义勇', '无惨']
var html = "<h1>Names</h1>"
html += "<ul>"
for (var i = 0; i < names.length; i++) {
html += "<li>" + names[i] + "</li>"
}
html += "</ul>"
document.getElementById("scan").innerHTML = html
</script>

效果

以上代码确实实现了功能,但JS和HTML交杂在一起,看起来不太美观,如果代码长一点更加难看。

在web项目中使用EJS

names.js

1
2
3
4
5
6
7
8
9
10
11
12
13
var express = require("express");
var app = express();
//指定模板
app.set("virew engine", "ejs");
const names = ['炭之郎', '祢豆子', '义勇', '无惨']

app.get('/names', (req, res) => {
res.render('names.ejs', { names, names });
})

app.listen(3000, function (req, res) {
console.log("Connected on port:3000")
})

view/names.ejs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html>
<html>

<head>
<title>names</title>
</head>

<body>
<div>
<h1>Names</h1>
<ul>
<% names.forEach(item=>{ %>
<li>
<%= item %>
</li>
<% }); %>
</ul>
</div>
</body>

</html>

本地导入express和ejs包,执行node names.js 后访问http://127.0.0.1:3000/names,效果如下。

效果是一样的,但是把JS和HTML代码分开了,只在需要的地方传入数据,可能就是解耦吧

看一下成品——Hexo中的post.ejs页面,可以看到直接就是HTMl代码加上一些逻辑控制语句。比之前在JS写HTML好一点,这个可能就是在HTML里写JS了……从这个角度来看,好像没差。


index.ejs与index.html
https://zhouyinglin.cn/post/2c97014e.html
作者
小周
发布于
2022年9月7日
更新于
2022年12月15日
许可协议