理解node的模板引擎
1.1.3:分析模板引擎
1.什么是模板引擎
模板引擎是一个将页面模板和要显示的数据结合生成HTML页面的工具
可以这么理解,如果说Express中的路由控制方法是MVC中的控制器的话,那么模板就是MVC的视图。
什么是ejs?
ejs是模板引擎的一种,也是在1.1.2节中用到的模板引擎,因为它使用起来非常简单,而且与express集成良好。
2.使用模板引擎
我在之前讲过通过以下两行代码设置模板文件的存储位置和使用的模板引擎:
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
注意:通过express -e blog,我们只是初始化了一个使用ejs模板引擎的工程而已,比如node_modules下添加了ejs模块,在views有index.ejs。这并不是说强制该项目只能使用ejs,而不能使用其它模板引擎如jade,真正指定使用哪个模板引擎的是:
app.use('view engine','ejs');
在1.1.2节的routes/index.js中通过调用res.render()渲染模块,并将其产生的页面返回给客户端。它接收两个参数,第一个参数是模板名称,即views目录下的模板文件名,扩展名.ejs可选;第二个参数是传递给模板的数据对象,用于模板翻译。
打开views/index.ejs,内容如下:
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
</body>
</html>
当我们res.render("index",{title:"木人子韦"});时,模板引擎会把<%=title%>替换成“木人子韦”,然后把替换后的页面显示给用户。
渲染后生成的页面代码为:
<!DOCTYPE html>
<html>
<head>
<title>木人子韦</title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1>木人子韦</h1>
<p>Welcome to 木人子韦</p>
</body>
</html>
注意:通过app.use(express.static(path.join(__dirname, 'public')));将css等静态文件的根目录设置为了public文件夹,所以在上面代码中的
href='/stylesheets/style.css'
就相当于
href='public/stylesheets/style.css'
ejs的标签系统非常简单,有以下标签:
<%'脚本' 标签,用于流程控制,无输出。<%_删除其前面的空格符<%=输出数据到模板(输出是转义 HTML 标签)<%-输出非转义的数据到模板<%#注释标签,不执行、不输出内容<%%输出字符串 '<%'%>一般结束标签-%>删除紧随其后的换行符_%>将结束标签后面的空格符删除
注意:当变量code为普通字符串时,<%=code%>和<%-code%>没有区别。当code为<div>从删库到跑路</div>这样的字符串时,<%=code%>会原样输出<div>从删库到跑路</div>,而<%-code%>则会显示 从删库到跑路 字符串。
感受一下标签<% code %>,其它的标签找官方文档https://ejs.bootcss.com/。下面模仿ejs的官方实例:
实例
数据
user:{name:"木人子韦"}
模板
<% if (user) { %>
<h2><%= user.name %></h2>
<% } %>
渲染后的代码
<h2>木人子韦</h2>
3.页面布局
在Express 3.x中不再使用layout.ejs进行页面布局,转而使用include来替代。
include的简单使用方法如下:
index.ejs
<%- include top%>
murenziwei
<%- include bottom%>
top.ejs
I am top.ejs
bottom.ejs
I am bottom.ejs
最终,index.ejs会显示
I am top.ejs
murenziwei
I am bottom.ejs
在1.1.3节中,我们学习了模板引擎的相关知识。
理解node的模板引擎的更多相关文章
- Node.js模板引擎的深入探讨
每次当我想用 node.js 来写一个 web 相关项目的时候.我总是会陷入无比的纠结.原因是 JavaScript 生态圈里的模板引擎实在太多了,但那么多却实在找不出一个接近完美的,所谓完美的概念就 ...
- node+ejs模板引擎的应用
前言: 最近在开发一个关于后台管理系统的基础开发平台,解释一下就是不管什么管理系统都有一些相同的功能,但是又有一些细节不一样,这个基础平台就是实现对于基础功能可以进行快速开发,主要有自定义的生成功能代 ...
- Node.js模板引擎学习----ejs
环境:windows+node.js+express 一.安装ejs 打开cmd窗口,输入npm install ejs -g,等待下载安装完成. 二.使用 调用过程中使用路由机制和模板,路由请求地址 ...
- [js高手之路]Node.js模板引擎教程-jade速学与实战1
环境准备: 全局安装jade: npm install jade -g 初始化项目package.json: npm init --yes 安装完成之后,可以使用 jade --help 查看jade ...
- [js高手之路]Node.js模板引擎教程-jade速学与实战1-基本用法
环境准备: 全局安装jade: npm install jade -g 初始化项目package.json: npm init --yes 安装完成之后,可以使用 jade --help 查看jade ...
- consolidate.js 一个Node.js 模板引擎的集合
consolidate是一个模板引擎的结合体.包括了常用的jade和ejs.通过配置我们就可以使用多种模板引擎. consolidate.js安装 npm install consolidate co ...
- [js高手之路]Node.js模板引擎教程-jade速学与实战2-流程控制,转义与非转义
一.转义与非转义 jade模板文件代码: doctype html html head meta(charset='utf-8') title jade学习-by ghostwu body h3 转义 ...
- [js高手之路]Node.js模板引擎教程-jade速学与实战4-模板引用,继承,插件使用
一.block 模块复用 把需要复用的模块用block定义 block后面跟上模块的名字,引用一次block 内容就会被复用一次 编译之后的结果: 二,继承模板(extends) 在实际开发中,网站的 ...
- [js高手之路]Node.js模板引擎教程-jade速学与实战3-mixin
强大的mixin mixin类似于函数的功能,可以达到模块复用的效果 mixin show: 定义一个类似函数的功能,名字叫show,里面的就是他的内容 +show: 调用show,每调用一次执行一次 ...
随机推荐
- java多线程系列12 ConcurrentHashMap CopyOnWriteArrayList 简介
我们知道 ,hashmap 和 arraylist 是线程不安全的 在多线程环境下有数据安全问题, 当然 我们可以通过Collections的一些方法把他们变成线程安全的, Collections.s ...
- ----这是一个register code----
这是一个register code,是需要用到<input>标签下的6个标签(?应该是标签喔) 然后附上代码 <html ><head><title>注 ...
- centos7通过yum安装JDK1.8
安装之前先检查一下系统有没有自带open-jdk 命令: rpm -qa |grep java rpm -qa |grep jdk rpm -qa |grep gcj 如果没有输入信息表示没有安装. ...
- 一不注意,在Unity3D中DllImport 引起的Bug.
单要说这个Bug是很简单,但是得从头说起. 一些大型的网络游戏,或者加载比较多的一些场景时,如果要等待所有模型,贴图等各种资源文件加载完毕才能执行游戏,对用户将会是一个很头大的事情.所以就需要用到动态 ...
- 什么是servlet?
一.servlet是什么? 是用java编写的应用在服务端的程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和修改数据,生成动态Web内容,例如页面等等.从实现上讲,Servlet可以响应任 ...
- R语言csv与txt文本读入区分(sep参数)
R语言csv与txt文本读入区分 R语言用来处理数据很方便,而处理数据的第一步是把数据读入内存空间,平时最常用的文本数据储存格式有两种: 一种是CSV(逗号分隔符文本)另一种是TXT(Tab分隔符或空 ...
- [solution] JZOJ3493 三角形
[solution] JZOJ3493 三角形 Description 平面上有n个点,求出用这些点可以构成的三角形数. Input 第一行一个整数n. 接下来n行,每行两个整数,表示点的坐标. Ou ...
- 长方体类Java编程题
1. 编程创建一个Box类(长方体),在Box类中定义三个变量,分别表示长方体的长(length).宽(width)和高(heigth),再定义一个方法void setBox(int l, int w ...
- 中国剩余定理poj1006
中国剩余定理即解一组带余除法的不定方程组(同余式组解法). 例如:求一个最小数x,已知x%3=2且x%5=3且x%7=2. 思路就是: 1.先从(3,5)的公倍数中找一个%7=1的最小公倍数,这里是1 ...
- 简单的基于矩阵分解的推荐算法-PMF, NMF
介绍: 推荐系统中最为主流与经典的技术之一是协同过滤技术(Collaborative Filtering),它是基于这样的假设:用户如果在过去对某些项目产生过兴趣,那么将来他很可能依然对其保持热忱.其 ...