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
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<div id=
"scan"
></div>
<
script
>
//原生JS渲染HTML字符串
var
names = [
'炭之郎'
,
'祢豆子'
,
'义勇'
,
'无惨'
]
var
html =
"<h1>Names</h1>"
html +=
"<ul>"
for
(
var
i =
; 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
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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
(
,
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<!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.top/2022/09/07/index.ejs与index.html/
作者
小周
发布于
2022年9月7日
许可协议