中间件

作用

  1. 执行任何代码
  2. 修改请求和响应对象
  3. 终结请求-响应循环. (让一次请求得到响应)
  4. 调用堆中的下一个中间件或者路由

分类

/*
1. 应用(全局)级中间件(过滤非法的请求,例如防盗链)
第一种: app.use((request,response,next)=>{}) // 所有请求都需要经过某些处理的时候用此种写法
第二种: 使用函数定义
2. 第三方中间件(例如: body-parser)
  app.use(hodyParser.urlencoded({extebded:true}))
  3. 内置中间件(express内部封装好的中间件)
  app.use(express.urlencoded({extended:true}))
  app.use(express.static('public'))
  4. 路由器中间件(Router)
   
备注:
1. 在exoress中, 定义路由和中间件的时候,根据定义的顺序(代码的顺序),将定义的每一个中间件或路由,放在一个类似于数组的容器中,当请求过来的时候,一次从容器中取出中间件和路由,进行匹配,如果匹配成功,交由该路由或中间件处理,如果全局中间件写在了最开始的位置,那么他就是请求的"第一扇门"
2. 对于服务器来说,第一次请求,只有一个请求对象,和一个相应对象,其他任何的request和response都是对二者的引用
*/

中间件实例

使用app.use创建全局中间件

const express = require("express")
const app = express();
// 使用全局中间件----所用请求的第一扇门
app.use((request,response,next)=>{
   /**
  * 1. 过滤一些不合法的请求,例如防盗链
  */
   if(request.get('Referer')){
       let miniReferer = request.get("Referer").split("/")[2]
       if(miniReferer === "localhost:8081"){
           next()
      }else{
           // 发生了盗链
           response.send("请在本站使用资源")
      }
  }else{
       next()
  }
})

app.get("/",(request,response)=>{
   response.send("success")
})
app.listen(3000,(err)=>{
   if(err){
       console.log("server error")
  }else{
       console.log("server success ")
  }
})

使用函数方式创建全局中间件

function demo (request,response,next){
   if(request.get('Referer')){
       let miniReferer = request.get("Referer").split("/")[2]
       if(miniReferer === "localhost:8081"){
           next()
      }else{
           // 发生了盗链
           response.send("请在本站使用资源")
      }
  }else{
       next()
  }
}
// 谁调用,作用在哪个路由下
app.get("/", demo ,(request,response)=>{
   response.send("success")
})

使用body-parser中间件

安装

npm i body-parser

示例

const express = require("express")
// 引入body-parser 用于解析post参数
const bodyParser = require("body-parser")
const app = express();
// 使用第三方中间件
app.use(bodyParser.urlencoded({extended:true})) // 解析post请求请求体中所携带的urllencided编码形式的参数为一个对象,挂载到request对象上
app.post("/test",(request,response)=>{
   console.log(request.body)
})

使用内置中间件

示例

const express = require("express")
const app = express();
// 使用第三方中间件
app.use(express.urlencoded({extended:true}))
// 使用内置中间件去暴露静态资源(js,css,html,img等文件)
/*
暴露静态资源的弊端: 访问是必须带上文件的扩展名
如 www.xxx.com/index.html 200
www.xxx.com/index 404

*/
app.use(express.static(__dirname+'/public'))
app.post("/test",(request,response)=>{
   console.log(request.body)
})
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇