Node.js环境安装
后端渲染
- 前端渲染,根据后端返回的json数据,生成html
- 后端渲染,后端直接把json与html结合完成返回到浏览器
jade
jade介绍
- jade模板文件语法
- 父子标签要缩进
- 属性:标签(key=value,key2=value)
- 内容:标签 内容
- 更多语法查看jade中文文档
jade使用
- 先安装jade
npm i jade
- js文件代码
//引入 express jade
const express=require('express')
const jade=require('jade')
// 创建服务器
const server=express()
server.listen(3000)
server.use(express.static('./public'))
//访问http://localhost:3000/
server.get('/',(req,res)=>{
//通过jade模板引擎渲染文件
//let html = jade.renderFile('jade模板文件',{pretty:true,key:value}); //返回字符
let html=jade.renderFile('./views/index.jade',{pretty:true,data:'这是一段数据'})
res.send(html)
})
- jade模板文件
html
head
body
div(class='active')
ul
li(class='active')
a(href="http://www.baidu.com")这是a标签
div 这是div标签
h1 #{data}
运行
ejs
ejs介绍
- ejs 结构就是
html
- 输出:
<%= 数据名|属性名|变量名 + 表达式 %>
- 语句:
<% 语句 %> 需要被<% %> 包裹
- 非转义输出:
<%- 数据名|变量名 + 表达式 %>
- 载入公共:
<%- include('./hd.ejs',{数据}) %>
- ejs更多资料点击进入官网了解
ejs使用
- 先安装ejs
npm i ejs
- js文件代码
const express = require('express')
const ejs = require('ejs')
const server = express()
server.listen(3000)
// 静态资源托管
server.use(express.static('./public'))
let data={
title:'hello ejs模板',
name:'张三',
age:18,
bool:false,
list:[
{id:1,msg:'今天周一',href:'href1'},
{id:1,msg:'今天周二',href:'href2'},
{id:1,msg:'今天周三',href:'href3'}
],
strong:"<strong>我是非常强壮的</strong>"
}
server.get('/', (req, res) => {
ejs.renderFile('./views/index.ejs', data, (err, data) => {
if (!err) {
res.send(data)
}
})
})
- ejs模板文件index.ejs代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- 只有静态资源托管才能引入 -->
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<!-- 引入另一个文件 -->
<%- include('./head.ejs',{data:'也可以在这传递数据'})%>
<!-- 输出 -->
<h1><%=name %></h1>
<h2><%= age+1 %></h2>
<!-- <strong>我是非常强壮的</strong> -->
<%= strong %>
<!-- 非转义输出 -->
<%- strong %>
<!-- 语句 -->
<% let a=1
let b=2
let c=a+b
%>
<p>c=> <%= c%></p>
<% d=10 %>
<% e=10 %>
<% f=d+e %>
<p>f=> <%= f%></p>
<!-- 判断语句 -->
<% if(bool){ %>
<h5>bool是false</h5>
<% }else{ %>
<h5>bool是true</h5>
<% } %>
<!-- 循环语句 -->
<ul>
<% for(let i=0;i<list.length;i++){ %>
<li><a href="<%= list[i].href %>"><%= list[i].msg %></a></li>
<% } %>
</ul>
</body>
</html>
- ejs模板文件head.ejs代码
<h1><%= title%></h1>
<h1><%= data%></h1>
- css文件
h1{color: red;}
ul,li{list-style: none;}
运行
直接用express进行后端渲染
代码
- 直接用
res.render
//安装完成 ejs jage模块后 直接用express就可以
const express=require('express')
const server=express()
server.listen(3000)
server.use(express.static('./public'))
let data={
title:'hello ejs模板',
name:'张三',
age:18,
bool:false,
list:[
{id:1,msg:'今天周一',href:'href1'},
{id:1,msg:'今天周二',href:'href2'},
{id:1,msg:'今天周三',href:'href3'}
],
strong:"<strong>我是非常强壮的</strong>"
}
//默认文件名 是 views 因此只需要写views下的文件路径即可
// 如果自己起了一个文件名字的话 例如 abc 则设置
// server.set('views','abc')
server.get('/',(req,res)=>{
//ejs 文件
// res.render('./index.ejs',data,(err,data)=>{
// if(!err){
// res.send(data)
// }
// })
// jade文件
let html=res.render('./index.jade',{pretty:true,data:'这是一段数据'})
res.send(html)
})