1、什么是Express框架
Express框架是基于Node.js平台,快速、开放、极简的WEB开发框架
2、如何安装Express框架
npm install --save express
3、Express框架能做什么?
1、已经封装好了服务器
2、已经封装好了路由
3、已经封装好了中间件
4、已经封装好了网络请求
4、Express框架怎么用?
NPM安装express框架 --> 引入express模块 --> 实例化express对象 --> 通过对象调用各种方法
4.1小demo
//引入框架
var express = require('express');
//实例化express对象
var app=express();
//通过对象调用方法-------------------
//根据用户请求的地址返回对应的数据
app.get('/',(req,res)=>{
console.log(req.url);
res.send('Welcome Yaobinggt Home');
});
app.get('/about',(req,res)=>{
console.log(req.url);
res.send('This is about us');
});
//路由参数
app.get('/profile/:id',(req,res)=>{
res.send('您所访问的路由参数为:' + req.params.id);
});
//监听服务器端口号
app.listen(3333);

5、EJS模版引擎
5.1、什么是EJS模版引擎
EJS是一套简单的模版语言,帮你利用普通的JavaScript代码生成HTML页面。
其他的模版引擎
1、jade
2、handlebars
3、hogan
5.2、EJS模版引擎的特点
特点:高效的嵌入式JavaScrip模版引擎
1、快速编译和渲染
2、简单的模版标签
3、支持浏览器端和服务器端
4、支持express视图系统
EJS示例代码
//index.js 入口文件
<ul>
<% for(var i=0;i<supplies.length;i++){%>
<li><%= supplies[i] %></li>
<% } %>
</ul>
EJS使用小示例
//引入框架
var express = require('express');
//实例化express对象
var app=express();
//设置视图系统
app.set('view engine','ejs');
//通过对象调用方法-------------------
//根据用户请求的地址返回对应的数据
app.get('/',(req,res)=>{
//console.log(req.url);
res.sendFile(__dirname + '/public/index.html');//send只能单纯的发送纯文本信息 而 sendFile可以传输我们的文件
});
app.get('/about',(req,res)=>{
//console.log(req.url);
res.sendFile(__dirname + '/public/about.html');
});
//路由参数
app.get('/profile/:id',(req,res)=>{
//res.sendFile(__dirname + '/views/profile.ejs'); 配置视图系统后访问还是下载文件
res.render('profile',{name:'yaobinggt'})
});
//监听服务器端口号
app.listen(3333);
//
//EJS文件:views/profile.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>主页</title>
<style>
body{background-color: skyblue;color:#fff ;}
h1{text-align: center;}
</style>
</head>
<body>
<h1>欢迎来到万能胶囊公司<%= name %> 的EJS页面!</h1>
</body>
</html>
复杂的参数传递示例
//复杂的参数传递
app.get('/profile/:id',(req,res)=>{
//res.sendFile(__dirname + '/views/profile.ejs'); 配置视图系统后访问还是下载文件\
var data=[
{name:[{name:'yaobinggt'},{name:'yaohengzhi'},{name:'yaohengbing'}],age:28},
{name:[{name:'UUM'},{name:'jiangyanmei'},{name:'aixinxin'}],age:29},
{name:[{name:'IUU'},{name:'yaoxiran'},{name:'yaouu'}],age:2}
];
res.render('profile',{websiteName:req.params.id,datas:data});
});
=>>>>
<ul>
<!-- <% for(var i=0;i<datas.length;i++) {%>
<li><p><%= datas[i].name %> <span><%= datas[i].age %></span></p></li>
<% } %> -->
<% datas.forEach((item)=>{ %>
<li>
<p<span><%= item.age %></span></p>
<% item.name.forEach((n)=>{ %>
<span><%=n.name %> </span>
<% }) %>
</li>
<% }) %>
</ul>
6、公共模板
6.1、使用EJS代替HTML
index.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>主页</title>
<link rel="stylesheet" href="../assets/style.css">
</head>
<body>
<!-- 引入公共模版 -->
<%- include('../public/nav.ejs') %>
<h1>欢迎来到万能胶囊公司主页</h1>
</body>
</html>
about.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>关于</title>
<link rel="stylesheet" href="../assets/style.css">
</head>
<body>
<!-- 引入公共模版 -->
<%- include('../public/nav.ejs') %>
<h1>欢迎来到关于我们页面</h1>
</body>
</html>
6.2、创建导航(公共模版)
公共导航
<!-- 公共文件只能有一个根标签 -->
<nav>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About</a></li>
</ul>
</nav>
6.3、解决外部样式不可使用问题
公共样式
body{background-color: skyblue;color:#fff ;}
h1{text-align: center;}
index.js
//引入框架
var express = require('express');
//实例化express对象
var app=express();
//设置视图系统
app.set('view engine','ejs');
//让服务器能够识别外部样式表
app.use('/assets',express.static('assets'));
//通过对象调用方法-------------------
//根据用户请求的地址返回对应的数据
app.get('/',(req,res)=>{
//console.log(req.url);
res.render('index');
});
app.get('/about',(req,res)=>{
//console.log(req.url);
res.render('about');
});
//路由参数
app.get('/profile/:id',(req,res)=>{
//res.sendFile(__dirname + '/views/profile.ejs'); 配置视图系统后访问还是下载文件\
var data=[
{name:[{name:'yaobinggt'},{name:'yaohengzhi'},{name:'yaohengbing'}],age:28},
{name:[{name:'UUM'},{name:'jiangyanmei'},{name:'aixinxin'}],age:29},
{name:[{name:'IUU'},{name:'yaoxiran'},{name:'yaouu'}],age:2}
];
res.render('profile',{websiteName:req.params.id,datas:data});
});
//监听服务器端口号
app.listen(3333);