ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

应用级中间件

2022-07-28 11:00:38  阅读:141  来源: 互联网

标签:中间件 app express request next 应用 response


 

中间件:

  概念:本质上就是一个函数  包含三个参数:request、response、next

作用:

  1.执行任何代码。

  2.修改请求和响应对象。

  3.终结请求-响应对象。

  4.调用堆栈中的下一个中间件或路由

分类:

  1.应用(全局)级中间件(过滤非法的请求,例如防盗链)

    第一种写法:app.use((request,response,next)=>{ })

    第二种写法:使用函数定义

  2.第三方中间件(通过npm下载的中间件,例如body-parser)

    app.use(bodyParser.urlencoded({extebded:true}))

  3.内置中间件(express内部封装好的中间件)

    app.url(express.urloencoded({extebded:true})))

    app.use(express.static('public'))

  4.路由器中间件(Router)

    

备注:

  1.在express中,定义路由和中间件的时候,根据定义的顺序(代码的顺序),将定义的每一个中间件或路由,放在一个类似于数组的容器中,当然求过来的时候,依次从容器里取出中间件和路由,进行匹配,如果匹配成功,交由该路由或中间件处理。

  2.对于服务器来说,一次请求,只有一个请求对象,和一个响应对象,其它任何的request和response都是对二者的引用                                                                                                                                                                                                                                                                  

   

   

const express = require('express')
const {response, request} = require("express");
const app =express()

app.get('/',(request,response)=>{
    response
        .send('ok')
})
app.get('/demo',(request,response)=>{
    console.log(request.query)
    response.send('ok2')
})

// 使用应用级全局中间件0
app.use((reque0st,response,next)=>{
    //response.send('我是中间件给你的响应')
    //1.过滤一些合法的请求,例如:图片防盗链
    // if (合法){
    //     next()
    // }else{
    //     ewsponse.send('禁止非法请求')
    // }
    if(request,get('Referer')){
        let miniReferer = request.get(Referer).split('/')[2]
        if (miniReferer === 'http://localhost:63342'){
            next()
        }else{
            //发生了盗链
            response.send(__dirname+'/public/qia.jpg')
        }
    }else{
        next()
    }
})

app.listen(3000,function (err){
    if (!err) console.log('ok')
    // else console.log(err)
})

 

标签:中间件,app,express,request,next,应用,response
来源: https://www.cnblogs.com/0722tian/p/16518080.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有