一、前言

随着前端业务的不断发展,页面交互逻辑的不断提高,让数据和界面实现分离渐渐被提了出来。JavaScript的MVC思想也流行了起来,在这种背景下,基于node.js的模板引擎也随之出现。

什么是模板引擎?

它用于解析动态数据和静态页面所生成的视图文件,将原本静态的数据变为动态,快速地实现页面交互;
目前使用较广的模板引擎有以下几种:Jade / Pug、EJS、Handlebars。

jade模板引擎

jade模板引擎相较于原来的html会显得更加简洁,它将标签原本的"<>"符号去掉,用括号代替,层级使用tab缩进来分,并且也支持js语法;

二、jade的基本使用

安装jade:

1

cnpm install jade --save

  在程序中引入jade:

1

2

3

app.set('views',"public");  //设置视图的对应目录

app.set("view engine","jade");      //设置默认的模板引擎

app.engine('jade', require('jade').__express);      //定义模板引擎

  特定路由渲染:

1

2

3

app.use("/",function(req,res){

    res.render("index.jade");

});

  完整实例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

const express=require("express");

const jade=require("jade");

const fs=require('fs');

var app=express();

//引用jade

app.set('views',"public");  //设置视图的对应目录

app.set("view engine","jade");      //设置默认的模板引擎

app.engine('jade', jade.__express);     //定义模板引擎

//获取jade文件

var str=jade.renderFile("./public/index.jade",{pretty:true});

console.log(str);

app.use("/",function(req,res){

    res.render("index.jade");

});

app.listen(8080);

  由上面的app.set('views',"public");可知,这里将jade文件放在了public文件夹下:

在执行res.render时,会自动渲染public中的index.jade文件,之后转换为HTML5进行dom渲染显示。

三、jade基础语法

1、jade对很多html操作进行了简化,如下:

1

2

3

4

5

6

html

    head

        style

    body

        div(class="content")

            h1 正文

  了解过html语句的,从结构上一定会发现,它将原本的双标签省略了,尖括号也不见了,而层级的划分则由缩进实现,默认的,jade会把几乎所有缩进后的字母变为标签(行内元素)。以下代码会变为:

1

2

3

4

5

6

7

8

9

10

<html>

  <head>

    <style></style>

  </head>

  <body>

    <div class="content">

      <h1>正文</h1>

    </div>

  </body>

</html>

  <div class="content"></div>也将用div(class="content")代表,简化了代码的书写;

2、“|”符号的作用

  有时我们想让我们的标签成为文字,那么“|”成为了绝好的工具:

1

2

div(class="content",id="content")

  | center

  我们可以看到,他将center作为文字原封不动的写入了html中,而不是作为一个标签渲染。
  当然我们用它来转换js语句:

1

2

3

4

5

script

    var cli = document.getElementById("content");

    | cli.onclick=function(){

    |   alert("aaa");

    | }

  他将会变为:

1

2

3

4

5

6

<script>

    var cli = document.getElementById("content");

    cli.onclick=function(){

        alert("aaa");

    }

</script>

3、识别js语句:

  可以通过 script. 来识别js语法:

1

2

3

4

5

script.

    var cli = document.getElementById("content");

    cli.onclick=function(){

        alert("aaa");

    }

  他也会变为:

1

2

3

4

5

6

<script>

    var cli = document.getElementById("content");

    cli.onclick=function(){

        alert("aaa");

    }

</script>

  我们可以看到,相比于用 | 使用script. 更加方便快捷。

4、引入其他js文件:

想在jade的js标签中引入其他js文件?没错,它也支持。前提请确保他们在同一文件夹下:

1

2

script

  include click.js

  得到:

1

2

3

4

5

<script>var cli = document.getElementById("content");

    cli.onclick=function(){

            alert("aaa");

    }

</script>

5、表达式

“-”允许我们直接写js语法,在变量调用时,通过 #{a+b} 或 div=a+b 进行:

1

2

3

4

5

6

7

8

html

    head

        

    body

        -var a=10

        -var b=20

        div a+b为:#{a+b}

        div=a+b

  会得到:

1

2

3

4

5

6

7

<html>

  <head></head>

  <body>

    <div>a+b为:30</div>

    <div>30</div>

  </body>

</html>

6、for循环:

"-"也可以用于循环语句的使用

1

2

3

4

5

6

7

8

html

    head

    

    body

        -var arr=0;

        -for(var i=5;i>arr;i--)

            div=i

        div the number = #{i}

  得到:

1

2

3

4

5

6

7

8

9

10

11

<html>

  <head></head>

  <body>

    <div>5</div>

    <div>4</div>

    <div>3</div>

    <div>2</div>

    <div>1</div>

    <div>the number = 0</div>

  </body>

</html>

7、case ,when

类似于switch case语句:

1

2

3

4

5

6

7

8

9

10

11

12

html

    head

    

    body

        var test = "汉子"

        -var none = "无"

        div The word is #{test}

        case test

            when "a": div the when is a

            when "b": div the second is b

            when "汉子": div the Third is 汉子

            default: The words is #{none}

  得到:

1

2

3

4

5

6

7

<html>

  <head></head>

  <body>

    <div>The word is 汉子。</div>

    <div>the Third is 汉子</div>

  </body>

</html>

  类似于switch case,只执行when中与case对应的代码块,在匹配后面用 : 来作为要执行的代码,后面跟上标签和对应语句

8、if else条件判断

1

2

3

4

5

6

7

8

9

html

    head

    

    body

        -for(var i=12;i>0;i--)

            -if(i%2==0)

                div(style={background:'#eee',width:'100%',height:'20px',color: '#333'}) 偶数

            -else

                div(style={background:'#333',width:'100%',height:'20px',color: '#eee'}) 奇数

  得到:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<html>

  <head></head>

  <body>

    <div style="background:#eee;width:100%;height:20px;color:#333">     偶数</div>

    <div style="background:#333;width:100%;height:20px;color:#eee">     奇数</div>

    <div style="background:#eee;width:100%;height:20px;color:#333">     偶数</div>

    <div style="background:#333;width:100%;height:20px;color:#eee">     奇数</div>

    <div style="background:#eee;width:100%;height:20px;color:#333">     偶数</div>

    <div style="background:#333;width:100%;height:20px;color:#eee">     奇数</div>

    <div style="background:#eee;width:100%;height:20px;color:#333">     偶数</div>

    <div style="background:#333;width:100%;height:20px;color:#eee">     奇数</div>

    <div style="background:#eee;width:100%;height:20px;color:#333">     偶数</div>

    <div style="background:#333;width:100%;height:20px;color:#eee">     奇数</div>

    <div style="background:#eee;width:100%;height:20px;color:#333">     偶数</div>

    <div style="background:#333;width:100%;height:20px;color:#eee">     奇数</div>

  </body>

</html>

9、style的写法:

在对style样式进行修改时,与script相同,也可使用 . 对其进行编辑,之后对不同的标签在其后面加{},大括号里写css语句1,并使用 ; 隔开

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

html

    head

        meta(charset="utf-8")

        title jade测试页面

        style.

            body{margin:0;padding:0}

            div

            {width: 100px;height: 100px;background: #ccc;text-align: center;line-height: 100px;margin: 10px auto}

            div.last{clear:left}

    body

        -var a=0;

        while a<12

            if a%2==0 && a!=0

                div.last=a++

            else

                div=a++

  得到:

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

<html>

  <head>

    <meta charset="utf-8"/>

    <title>jade测试页面</title>

    <style>

      body{margin:0;padding:0}

      div

      {width: 100px;height: 100px;background: #ccc;text-align: center;line-height: 100px;margin: 10px auto}

      div.last{clear:left}

    </style>

  </head>

  <body>

    <div>0</div>

    <div>1</div>

    <div class="last">2</div>

    <div>3</div>

    <div class="last">4</div>

    <div>5</div>

    <div class="last">6</div>

    <div>7</div>

    <div class="last">8</div>

    <div>9</div>

    <div class="last">10</div>

    <div>11</div>

  </body>

</html>

10、Mixin

Mixin的作用是对模块的复用,当重复代码有不同内容时,起作用就来了:

1

2

3

4

5

6

7

var num = 0;

mixin node

    div The number in mixin node is #{num++}

+node()

+node()

+node()

div At last, the number in mixin node is #{num++}

  得到:

1

2

3

4

<div>The number in mixin node is 0</div>

<div>The number in mixin node is 1</div>

<div>The number in mixin node is 2</div>

<div>At last, the number in mixin node is 3</div>

以上则是jade的一些常用语法,如果平常使用jade作为开发,那么这些是非常基础的,也希望大家有所体会

Express全系列教程之(十):jade模板引擎相关推荐

  1. Express全系列教程之(十五):文件下载

    简介 文件下载非常简单,仅需通过res.download()执行即可,他可以写为3种形式: res.download('/report-12345.pdf');res.download('/repor ...

  2. Express全系列教程之(五):Express的中间件

    一.中间件 从字面意思,我们可以了解到它大概就是做中间代理操作,事实也是如此:大多数情况下,中间件就是在做接收到请求和发送响应中间的一系列操作.事实上,express是一个路由和中间件的web框架,E ...

  3. Express全系列教程之(四):获取Post参数的两种方式

    一.关于POST请求 post方法作为http请求很重要的一部分,几乎所有的网站都有用到它,与get不同,post请求更像是在服务器上做修改操作,它一般用于数据资源的更新. 相比于get请求,post ...

  4. Java NIO系列教程(十 五)Java NIO Path

    转载自  Java NIO系列教程(十 五)Java NIO Path 译文链接  译者:章筱虎 Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新.J ...

  5. 织梦仿站系列教程第二十三讲——列表页制作(二)

    织梦后台提示用户名不存在 查看数据库用户名被改为spider 织梦仿站系列教程第二十三讲--列表页制作(二) 这一讲,我们讲下列表页的分页代码,先找到如下代码: 865 1 href="ht ...

  6. Java NIO系列教程(十二) Java NIO与IO

    原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov   译者:郭蕾    校对:方腾飞 当学习了Java ...

  7. python建站部署_SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台...

    SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台 一.概述 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速.学习简单.轻量级.易扩展.现已开放源 ...

  8. spring boot 入门_SpringBoot入门建站全系列(三十)Mybatis多数据源进行数据库操作

    SpringBoot入门建站全系列(三十)Mybatis多数据源进行数据库操作 一.概述 多数据源,就是有多个数据库的配置. 多数据源配置并不麻烦,使用起来和单数据源基本相同,但是,重要的是事务的控制 ...

  9. eureka集群只注册一个_Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇

    Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇 本文主要内容: 1:spring cloud整合Eureka总结 本文是由凯哥(凯哥Java:kagejava ...

最新文章

  1. python数据可视化地图_python--地图可视化
  2. 设定游戏背景和英雄登场
  3. 暴走大侠找不到服务器了,《暴走大侠》常见问题汇总(图文)
  4. kinux查日志_Linux查看日志常用命令
  5. 面试中这样自我介绍更能抓住面试官的耳朵
  6. mongodb java 多条件查询_MongoDB_Java连接mongo 使用Java多条件查询mongo数据
  7. python函数装饰嵌套_python3--函数名本质,函数嵌套,闭包,装饰器
  8. 表达式转换成后缀表达式进行计算
  9. codeforces 906C
  10. .net登录界面_JAVA实现简单的用户登录客户端
  11. callback的实现
  12. poj 3190(贪心)
  13. qt 批量裁剪图片_下载王APP批量保存视频号视频、免费短视频去水印、4K高清视频下载...
  14. 常见的一些反爬虫策略(上篇)-Java网络爬虫系统性学习与实战系列(9)
  15. 用计算机计算2的31次方,2的31次方,用什么方法可以最快算出来呢
  16. 服务器虚拟内存可以设置其他盘,Win7系统如何把虚拟内存设置在其它盘符?
  17. 架构设计:网络附属存储NAS,块存储EBS与对象存储OSS的比较以及选用
  18. html中支持透明图片的格式,IE6 png图片透明的解决方法教程
  19. DFMA 方法帮助降低血液分析仪成本
  20. MS7024-数字编解码/TV编码器

热门文章

  1. NOIP 提高组复赛 day1 国王游戏
  2. Vue2写浙江政务服务平台微服务踩的坑
  3. 云服务器配置网站卡顿,大型网游云服务器要多大配置才能解决卡顿等问题?
  4. 【仙变3】牧仙记版VM一键端
  5. python输入年月日输出年月日_新手学习必看的0基础入门Python与python的输入输出...
  6. 第十一章 一元线性回归
  7. 《统计学》笔记:第11章 一元线性回归
  8. 一款开源的Java在线考试系统项目(附源码)
  9. JAVA POI导出EXCEL设置自定义样式(线框加粗,合并指定行,合计求和,冻结行)
  10. python结巴分词 能分英文吗_NLTK(一):英文分词分句