一文明白话讲清晰Node中间件

打印 上一主题 下一主题

主题 986|帖子 986|积分 2958

一文明白话讲清晰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里面,返回给客户端
  1. // 这里假设已经登陆成功了,也就是response里面已经有ID了
  2. const app=express()
  3. function middleware(request,response,next){
  4.    
  5.     /*
  6.     * 根据ID读取封装用户信息
  7.     * */
  8.     next()
  9. }
  10. 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 第三方中间件



  • 我们可以通过npm暗账第三方中间件
6. 简单实现一个中间件



  • 基于express实现,请先设置express项目情况(创建项目目次,然后nem init 初始化,再然后用npm install express命令安装express )。
  • 我们大概要实现的是,接收来自8088端口的哀求,然后返回数据,在返回数据前,插入中间件做一些事变
  • 我们创建一个node.js,里面监听8088端口的哀求
  1. const express=require("express")
  2. const app=express()
  3. app.get("/",(request,response)=>{
  4.     response.send(`<div>Listen 8088 Result</div>`)
  5. })
  6. app.listen(8088,()=>{
  7.     console.log("Listening 8088 ")
  8. })
复制代码


  • 然后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信息,并打印正在实行中间件
  1. const express=require("express")
  2. const app=express()
  3. //定义中间件
  4. function middleware(req,res,next){
  5.     console.log(req,res)
  6.     console.log('executing middleware')
  7.     next()
  8. }
  9. app.get("/",middleware/*中间件*/,(request,response)=>{
  10.     response.send(`<div>Listen 8088 Result</div>`)
  11. })
  12. app.listen(8088,()=>{
  13.     console.log("Listening 8088 ")
  14. })
复制代码


  • 会发现当我们咱欣赏器输入localhost:8088回车,就看到了除了response出来的东西,控制台还打印了request信息,response信息和executing middleware
  • 这就说明中间件起作用了

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表