一文明白话讲清晰Node中间件
1. 先讲故事
- 我们前端开发,避免不了和服务器进行数据交互,发送网络哀求
- 但有些情况下,客户端发送的哀求大概数据格式Request不一定符合服务器的要求,我们希望在服务器处置惩罚数据之前,能有一个东西对Request数据格式进行一下判断和处置惩罚
- 大概服务器在发送Response的之前,希望添加一些相应头的设置,我们也希望有这么一个东西能帮忙
- 于是就如许的模式
- 中间这个东西,就是所谓的中间件
2.中间件
- 通过上面的先容我们大概了解了什么事中间件
- 他的本质可以明确为一个函数
- 客户端的Request先到到达中间件,处置惩罚完成后,交给实际业务逻辑
- 业务逻辑处置惩罚完后,把Response交给中间件,处置惩罚完成后,发送给客户端
- 当然,中间件可以是多个,这个处置惩罚完交给下一个,交的方式就是通过next指定,直到所有的中间件全部实行完。许多人管这个叫洋葱模型,实在别洋葱大蒜了,要重要的是你要明确实心的原理
3. 怎么用
- 因为中间件就是一个函数,针对node差别的框架中间件的使用方式大同小异,重要是参数的差别
- koa框架中,中间件担当两个参数,ctx和next
- ctx里面封装了Request和Response变量
- next就是下一个中间件
- 而在express框架中,直接担当三个参数,request,response和next,相当于把ctx解耦了
- 我们以express举例,
- 如果用户登录了,我们拿到用户的ID,再读取用户的详细信息封装在response里面,返回给客户端
- // 这里假设已经登陆成功了,也就是response里面已经有ID了
- const app=express()
- function middleware(request,response,next){
-
- /*
- * 根据ID读取封装用户信息
- * */
- next()
- }
- app.use(middleware)
复制代码
- 在网络中的体系之间进行实时数据访问
- 在哀求对象到达服务器之前访问哀求对象,做进一步处置惩罚
- 用于身份验证和日记记录
- 用于指定HTTP标头
- 优化和提高性能
4. 快速中间件
- 快速中间件可以明确为各框架内置的中间件
- 比如在Express中,我们常用的body-parse,负责剖析HTTP哀求正文
- 再比如cookie-parse,负责剖析cookie标头,并添补request.cookies
5. 中间件的分类
5.1 应用级中间件
5.2 路由级中间件
- 路由级中间件可以通过路由器灯方法实现,比兔router。use(),工作方式和应用及中间件一样
5.3 内置中间件
- 不依靠connect方法,常用的有static,静态资产函数;json,添加JSOn有效负载类盘算传入哀求
5.4 处置惩罚错误中间件
5.5 第三方中间件
6. 简单实现一个中间件
- 基于express实现,请先设置express项目情况(创建项目目次,然后nem init 初始化,再然后用npm install express命令安装express )。
- 我们大概要实现的是,接收来自8088端口的哀求,然后返回数据,在返回数据前,插入中间件做一些事变
- 我们创建一个node.js,里面监听8088端口的哀求
- const express=require("express")
- const app=express()
- app.get("/",(request,response)=>{
- response.send(`<div>Listen 8088 Result</div>`)
- })
- app.listen(8088,()=>{
- console.log("Listening 8088 ")
- })
复制代码
- 然后node node.js运行,会发现首先控制台打印了Listening 8088,说明我们已经在监听8088了
- 然后咱欣赏器输入localhost:8088回车,就看到了response出来的东西
/20230724024159.png?origin_url=img_6.png&pos_id=img-eaPnjTf6-1737011095573)
- 这时候我们在response。send之前加一个中间件,我们希望在中间件里面允许request和response信息,并打印正在实行中间件
- const express=require("express")
- const app=express()
- //定义中间件
- function middleware(req,res,next){
- console.log(req,res)
- console.log('executing middleware')
- next()
- }
- app.get("/",middleware/*中间件*/,(request,response)=>{
- response.send(`<div>Listen 8088 Result</div>`)
- })
- app.listen(8088,()=>{
- console.log("Listening 8088 ")
- })
复制代码
- 会发现当我们咱欣赏器输入localhost:8088回车,就看到了除了response出来的东西,控制台还打印了request信息,response信息和executing middleware
- 这就说明中间件起作用了
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |