中间件
何为中间件
- 中间件(Middleware)本质是一个回调函数。
- 中间件函数可以像路由回调函数一样,会收到:、。
- 中间件类似于一道道“”,用于完成一系列任务,如验证、日志记录、数据处理等。
中间件分类
- 全局中间件
- 路由中间件
全局中间件
每个请求到达服务端之后,都会执行全局中间件,在全局中间件中可以编写额外的处理逻辑。
定义中间件
js
function middle1(request, response, next) {
//实现功能代码
//.....
//执行 next 函数(当如果希望执行完中间件函数之后,
//仍然继续执行路由中的回调函数,必须调用 next)
next();
}使用中间件
js
//使用中间件
app.use(middle1);
app.get("/demo", (request, response) => {
console.log(request);
response.send("ok");
});匿名写法
js
app.use(function (request, response, next) {
console.log("定义第一个中间件");
next();
});多个中间件
js
function middle1(request, response, next) {
//实现功能代码
/*******/
next();
}
function middle2(request, response, next) {
//实现功能代码
/*******/
next();
}
app.use(middle1);
app.use(middle2);路由中间件
如果只需要对某一些路由进行功能封装,则就需要路由中间件
js
app.get("/路径", `中间件函数1`, `中间件函数2`, (request, response) => {
/*******/
});中间件实例应用
静态资源
js
const express = require("express");
const app = express();
//静态资源中间件的设置,将当前文件夹下的 public 目录作为网站的根目录
app.use(express.static("./public"));
/*
如果访问的内容经常变化,还是需要设置路由
但是,在这里有一个问题,如果public目录下有index.html文件,单独也有 index.html 的路由,
则谁书写在前,优先执行谁
*/
app.get("/index.html", (request, response) => {
respsonse.send("首页");
});
//监听端口
app.listen(8088, () => {
console.log("8088 端口启动....");
});注意
- 文件为默认打开的资源。
- 如果静态资源与路由规则同时匹配,谁先匹配谁就响应。
- 路由响应动态资源,静态资源中间件响应静态资源。
解析请求
使用 和 中间件解析请求体。
js
//处理 querystring 格式的请求体
let urlParser = express.urlencoded({ extended: false });
//处理 JSON 格式的请求体
let jsonParser = express.json();设置路由中间件,然后使用 来获取请求体数据。
js
app.post("/login", urlParser, (request, response) => {
//获取请求体数据
//console.log(request.body);
//用户名
console.log(request.body.username);
//密码
console.log(request.body.userpass);
response.send("获取请求体数据");
});获取到的请求体数据:
json
{
"username": "admin",
"userpass": "123456'"
}
