NodeJS 模板引擎作用:生成页面

在node常用的模板引擎一般是
1、jade ——破坏式的、侵入式、强依赖(对原有的html体系不友好,走自己的一套体系)
2、ejs ——温和的、非侵入式的、弱依赖


本次就汇总一下jade的一些特性和使用方法。


一、Jade

在node中,jade的编写特性有:
1、根据缩进,来划分规定层级
例如:在原始目录下建立一个views目录,来存放该 test.jade


html
head
script
style
body

在node.js中来调用该jade(记得先用npm install jade)


const jade = require('jade') ;
var str = jade.renderFile('./views/test.jade' ,{pretty : true }) //pretty : ture 相当于beauty格式化一下输出的代码
console.log(str)

运行一下,log输出的语句便成了


<html>
<head>
<script></script>
<style></style>
</head>
<body>
</body>
</html>

可以看到在nodejs中的jade模板引擎,是根据缩进输入的情况,来划分规定层级的。
当然,如果你想把该代码输出成一个html文件,我们可以在源目录下新建一个build目录来存放生成的文件
那就将刚才的node.js改成


const jade = require('jade');//加载jade引擎
const fs = require('fs') var str = jade.renderFile('./views/test.jade' ,{pretty : true }); //pretty : ture 相当于beauty格式化一下输出的代码
fs.writeFile('./buuld/index.html' ,str , function(err){
if (err)
console.log("编译失败");
else
console.log("编译成功");
})

执行完毕会在build目录下生成index.html
以上就是jade初级的使用方法。

但是我们使用模板引擎的目的并不是再此,还是能够添加css/js/data等数据。

2、关于class/style的写法——属性放在()里面,用逗号分隔
如:


html
head
script
style
body
div(class=['aaa','bbb','ccc'])
//class也可以写成div(style="aaa bbb ccc")
div(style={width:'200px' ,height:'300px' ,background:'red'})
//style也可以写成div(style="width:200px;xxxx")

运行一下node.js,则输出结果为



<html>
<head>
<script></script>
<style></style>
</head>
<body>
<div class="aaa bbb ccc">
<div style="width:200px;height:300px;background:red"></div>
</body>
</html>

关于上方输出格式,可以发现,style是可以用json传输的class是可以采用数组传输进去的
因此可以在node.js中直接插入相关属性数据,然后在jade文件调用,这样就可以很方便的生成不同框架的模板文件

如果你想插入相关属性数据,并调用的话,应当在node.js中的 jade.renderFile中如此添加数据


/
var str = jade.renderFile('./views/test.jade' ,{pretty : true ,
arr:['aaa' ,'bbb' ,'ccc'], cls:{width :'200px' , height:'200px' , background :'red'}
});

并在test.jade文件中修改如下:


html
head
script
style
body
div(class=arr)
div(style=cls})

运行一下,结果是跟刚才的相同

3、在jade标签中输入数据时,记得在相应标签后,加一个空格

我们通常前端编程的时候,一般都会写到


<div>名称:DobTink</div> //在标签内添加“名称:”之类的数据
<div>年龄:15</div>
<script src='a.js'></script>
<script> //或者在jade中编写JavaScript
window.onload = function(){
console.log('测试输出');
}
</script>
<a href="http://www.dobtink.com">首页</a> //编写a标签、img标签给其src赋予属性
///等等

而在jade中,我们需要这样来写


div 名称:DobTink
div 年龄:15
script(src='a.js' ,xx = '')
script. //注意在script后面加个点"."
window.onload = function(){
console.log('测试输出');
}
a(href="http://www.dobtink.com") 首页

执行一下,便如上所示。

4、在jade中使用if else switch while 等语句

有些情况下,我们需要从后天拿取数据,并对数据在jade中进行数据处理操作,而在jade中的 这些语句还是很方便地
代码如下:

4.1 、jade中的 if 使用


html
head
body
-var a = 15;
-if(a%2==0)
div(style={background:'red'}) 偶数
-else
div(style={background:'green'}) 奇数

4.2 、jade中的 switch 使用


html
head
body
-var a = 3;
case a
when 0
div aaa
when 1
div bbb
when 2
div ccc
when 3
div ddd
default
|默认

在jade中,switch是不存在的,被转义成了case,使用方法跟switch一致。
在该段代码中 “|”符号,是直接输出后面数据, "-"号之后的语句,jade会默认为是逻辑执行代码语句,之后的语句它并不会要求每行都需要添加"-"符号。

来源:https://segmentfault.com/a/1190000016281552

学习篇:NodeJS中的模板引擎:jade的更多相关文章

  1. nodejs学习(二) ---- express中使用模板引擎jade

    系列教程,上一节教程  express+nodejs快速创建一个项目 在创建一个项目后,views目录下的文件后缀为 .jade . 打开 index.jade,具体内容如下图(忽略 header.j ...

  2. node.js中的模板引擎jade、handlebars、ejs

    使用node.js的Express脚手架生成项目默认是jade模板引擎,jade引擎实在是太难用了,这么难用还敢设为默认的模板引擎,过分了啊!用handlebars模板引擎写还说的过去,但笔者更愿意使 ...

  3. Express ( MiddleWare/中间件 路由 在 Express 中使用模板引擎 常用API

    A fast, un-opinionated, minimalist web framework for Node.js applications. In general, prefer simply ...

  4. nodeJs学习-09 模板引擎 jade、ejs

    模板引擎: jade -破坏式.侵入式,强依赖:用了之后不能随便用别的引擎 ejs - 温和.非侵入时.弱依赖 jade使用 const jade = require('jade'); var str ...

  5. nodeJs学习-12 consolidate适配各种模板引擎

    const express=require('express'); const static=require('express-static'); const cookieParser=require ...

  6. js 模板引擎 jade使用语法

    Jade是一款高性能简洁易懂的模板引擎,Jade是Haml的Javascript实现,在服务端(NodeJS)及客户端均有支持. 功能 · 客户端支持 · 超强的可读性 · 灵活易用的缩进 · 块扩展 ...

  7. knockoutJS学习笔记02:jsRender模板引擎

    上一篇最后提到了模板,并尝试自己编写一个最简单版本:有些朋友可能用过 jqtmpl,这是一个基于jquery的模板引擎,不过它已经不再更新了,而且据说渲染速度比较慢.这里介绍另外一个模板引擎:jsRe ...

  8. 第115天:Ajax 中artTemplate模板引擎(一)

    一.不分离与分离的比较 1.前后端不分离,以freemarker模板引擎为例,看一下不分离的前后端请求的流程是什么样的? 从上图可以看出,前后端开发人员的工作耦合主要在(3)Template的使用.后 ...

  9. express中ejs模板引擎

    1.在 app.js 中通过以下两个语句设置了 引擎类型 和页面模板的位置: app.set('views', __dirname + '/views'); app.set('view engine' ...

随机推荐

  1. jQuery 事件操作

    入口函数 使用$(document).ready(()=>{})作为jQuery入口函数,与window.onload(()=>{})类似,但它不会等待图片等外部资源的加载完毕,而是在HT ...

  2. 区块链入门到实战(30)之Solidity – 基础语法

    一个 Solidity 源文件可以包含任意数量的合约定义.import指令和pragma指令. 让我们从一个简单的 Solidity 源程序开始.下面是一个 Solidity 源文件的例子: prag ...

  3. [PKUWC2018]Minimax 题解

    根据题意,若一个点有子节点,则给出权值:否则可以从子节点转移得来. 若没有子节点,则直接给出权值: 若只有一个子节点,则概率情况与该子节点完全相同: 若有两个子节点,则需要从两个子节点中进行转移. 如 ...

  4. Linux环境编程进程间通信机制理解

    一.Linux系统调用主要函数 二.创建进程 1.创建子进程系统调用fork() 2.验证fork()创建子进程效果 3.系统调用fork()与挂起系统调用wait() 三.模拟进程管道通信 四.pi ...

  5. MyEclipse2017 安装MAVEN插件办法

    笔者辛苦所写,如要留用,请标明出处,谢谢 —————————————————————————————————————————————————————— 笔者由于用到的项目使用到MAVEN,为了以后搭建 ...

  6. 09.redis 哨兵主备切换时数据丢失的解决方案

    一.两种数据丢失的情况 1. 异步复制导致的数据丢失   因为master->slave的复制是异步的,所以可能有部分数据还没复制到slave,master就宕机了,此时这些部分数据就丢失了 2 ...

  7. Unity - NGUI - 优化ScrollView的一些心的

    ScrollView是NGUI非常好用的一个内置组件,但是效率不好,当子物体过多的时候,一旦开始拖动就帧数狂掉,我目前有3个解决思路: 1. NGUI自带的Example 8 - Scroll Vie ...

  8. unity 对Animator动画系统的研究

    unity的新动画系统叫Mecanim,使用Animator来取代旧系统Animation,按Unity文档的惯例:知识点主要分2部分:unity manual和unity script,读者可以边看 ...

  9. unity 4种实现动态障碍方法

    此文将介绍4种实现动态障碍的方法,2种基于navmesh,2种基于astar算法. 1.基于navmesh. 1.制作场景障碍: a.有几个独立的障碍物,就定义几个user area,即,一个场景仅仅 ...

  10. ConcurrentHashMap的size方法是线程安全的吗?

    前言 之前在面试的过程中有被问到,ConcurrentHashMap的size方法是线程安全的吗? 这个问题,确实没有答好.这次来根据源码来了解一下,具体是怎么一个实现过程. ConcurrentHa ...