1.中间件是什么?功能?
中间件:
- 中间件主要针对 收到 HTTP 请求后 和 发送响应 之前,这个阶段执行的一些函数
- 使用 express 对象的 use 方法可以在一条路由的处理链上插入中间件
- 为某个path添加了中间件后,以该路径为基础的路径被访问时,都会应用到该中间件
- 如果为 ‘/’ 添加了中间件,则所有请求都会应用。省略第一个path参数则默认为 ‘/’
- Express 还提供了一个 static 中间件,可以用来处理网站里的静态文件的GET请求
功能:
- 执行任何代码
- 对请求和响应对象进行更改
- 结束请求/响应循环
- 调用堆栈中的下一个中间件函数
2.中间件类型
- 应用层中间件
- 路由中间件
- 错误处理中间件
- 内置中间件
- 第三方中间件
3.应用级中间件
const express = require('express')
const app = express()
function middlewareA(req, res, next) {
console.log('1')
next()
console.log('6')
}
function middlewareB(req, res, next) {
console.log('2')
next()
console.log('5')
}
function middlewareC(req, res, next) {
console.log('3')
next()
console.log('4')
}
// 1 2 3 4 5 6
app.use(middlewareA)
app.use(middlewareB)
app.use(middlewareC)
app.listen(3000, function () { console.log('http://localhost:3000') })
4.路由中间件
const express = require("express");
var app = express();
var router1 = express.Router();
var router2 = express.Router();
router1.get("/",(req,res,next)=>{
res.send("首页1");
});
router1.get("/user",(req,res)=>{
res.send("用户登录1");
});
router2.get("/",(req,res,next)=>{
res.send("首页2");
});
router2.get("/user",(req,res)=>{
res.send("用户登录2");
});
app.use("/",router1); // localhost => 首页1 localhost/user =>用户登录1
app.use("/login",router2) // localhost/login => 首页2 localhost/login/user => 用户登录2
module.exports = app
5.内置中间件
- express.static 唯一内置的中间件,它基于 serve-static,负责在 Express 应用中提供静态资源x
- 通过express.static 可以用来处理网站里的静态文件的GET请求
- 通过express.static(root,[options])调用
root:是要处理的静态资源的根目录,可以是绝对路径,也可以是相对路径
[options]:可选参数用来指定一些选项
6. 第三方中间件
// Express 应用的功能通过第三方中间件来添加 (安装模块:$ npm install cookie-parser)
var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');
// 加载 cookie 解析中间件
app.use(cookieParser());