Express简介
Express是node的一个第三方的框架,用于处理HTTP请求等功能,其特殊的功能在他的中间件。
Express的核心功能:
- 可以设置中间件来响应HTTP请求
- 定义路由可以表示执行不同的HTTP请求
- 通过模板来传递参数动态渲染HTML页面
Express的安装命令
安装Express到依赖列表中
- 第一步:先初始化项目模板
npm init -y
- 第二步:安装Express
npm install express -S
以上是安装Express的一种方法,其实还有一种方法就是使用淘宝镜像。
- 第一步:安装淘宝镜像:首先要有一个淘宝镜像的包:
npm config set registry 'https://registry.npm.taobao.org/'
- 第二步:使用淘宝镜像安装Express
cnpm i express -S
以上命令会将Express框架安装到node_modules目录中。要是使用第一种方法的话后面的-S可以不写,要是用淘宝镜像来安装Express就必须加-S,不然你的Express不会加载到初始化配置文件dependencies中
检查Express版本号的命令
npm list express
Express的实际代码如下:
const express = require("express");
let app = express();
//设置端口
app.listen(5550);
//路由
app.get("/",(req,res)=>{
res.send("你好,世界");
});
在浏览器中访问http://localhost:5550/,结果如下如所示
Express的中间件
Express的中间件用通俗易懂的话来介绍就是在路由请求之前可以先设置中间件。相当于你在吃饭之前你叫你先洗手,这是对你有好出的。你设置好的中间件是可以继承的,当然也可以设置多个中间件,这就是中间件的定义。
const express = require("express");
let app = express();
//设置端口
app.listen(5555);
//设置中间件
app.use((req,res,next)=>{
req.goudan = "123";
console.log(req.goudan);
next();//如果你不next的话,就不会执行下面的路由,浏览器就会一直请求
});
app.get("/",(req,res)=>{
req.goudan = "狗蛋";
console.log(req.goudan);
res.send("狗蛋你好啊");
});
课堂小知识:中间件有2个参数,第一个:是路径(不写默认所有路由都可以访问"/"),第二个:就是中间件了
const express = require("express");
let app = express();
app.listen(5550);
app.use("/index",(req,res,next)=>{
req.goudan = "123";
console.log(req.goudan);
next();
});
app.get("/",(req,res)=>{
req.goudan = "狗蛋";
console.log(req.goudan);
res.send("狗蛋你好啊");
});
app.get("/index",(req,res)=>{
res.send("index的页面");
})
访问localhost://5550/index就可以进入到index的界面了
其实一个路由也是一个中间件,第二个参数也有next:
const express = require("express");
let app = express();
app.listen(5550);
app.use("/index",(req,res,next)=>{
req.goudan = "123";
console.log(req.goudan);
next();
});
app.get("/",(req,res,next)=>{
req.goudan = "狗蛋";
console.log(req.goudan);
console.log(1);
next();//如果不写next的话就不会执行下面的路由,会一直在请求
});
app.get("/",(req,res)=>{
req.goudan = "狗蛋";
console.log(req.goudan);
console.log(2);
res.send("狗蛋你好啊");
});
app.get("/index",(req,res)=>{
res.send("index的页面");
})
注意:中间件必须写在路由的前面,写在路由的后面是没有任何意义的
Express默认中间件
express.urlencoded():把前端请求到的数据以对象的形式解析出来
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="http://localhost:5551" method="post">
<input type="text" name="user1"><br>
<input type="text" name="user2"><br>
<input type="submit">
</form>
</body>
</html>
const express = require("express");
let app = express();
app.listen(5551);
app.use(express.urlencoded());
app.post("/",(req,res)=>{
console.log(req.body);
res.send(req.body.user1+req.body.user2);
});
express.static():访问公共资源静态块,就是可以访问公共资源
const express = require("express");
let app = express();
app.listen(5552);
app.use(express.static("file"));//可以访问file目录下的文件
app.get("",(req,res)=>{
res.send();
});
express.Router():子路由
//这个是index.js的文件
const express = require("express");
let router = express.Router();
router.get("/",(req,res)=>{
req.afei = "afei";
res.send("teacher/"+req.afei);
});
router.get("/fengyu",(req,res)=>{
req.fengyu = "afei";
res.send("teacher/"+req.fengyu);
});
module.exports = router;
//引用index.js的文件
const express = require("express");
let app = express();
app.listen(6780);
app.use("/index",require("./routers/index"));
express.Router()子路由的好处,就是分模块开发,便于管理