中间件使用注意事项+中间件的分类

  • 一定要在路由之前注册中间件(在后面就,中间件不会生效,直接响应了路由——因为服务器到达请求都是从上到下进行匹配的---)
  • 客户端发送的请求,可以连续调用多个中间件,进行处理
  • 只要调用next表示此次的业务逻辑结束了,不要再next后面写代码,防止逻辑混乱
  • 执行完中间件的代码,不要忘记调用next函数
  • 连续调用多个中间件,多个中间件之间,共享req和res

中间件的分类 (Express官方分成5类)

  • 应用级别的中间件:通过app.use()或者app.get()或者app.post().绑定到app(服务器)实例上的中间件,叫做应用级别的中间件-通过use,get,post方法绑定到app上
    //应用级别的中间件(全局中间件)
    app.use(function(req,res,next){
         
        console.log('第一个中间件')
        next()
    })
    
    //应用级别的中间件(局部局中间件)
    app.get('/user',mv1,mv2,(req,res)=>{
        res.send(' 响应客户端的127.0.0.1/user的get请求 局部中间件会生效')
    })
    
    //应用级别的中间件(局部局中间件)
    app.post('/user',mv1,mv2,(req,res)=>{
        res.send(' 响应客户端的127.0.0.1/user的get请求 局部中间件会生效')
    })
    
  • 路由级别的中间件:绑定到express.Router()实例上,叫做路由级别的中间件。它的用法和应用级别的中间件没人任何区别。只不过,应用级别的中间件是绑定到app实例上,路由级别的中间件是绑定到router实例上
    //导入express
    const express=require('express')
    //创建路由对象
    const router=express.Router()
    //路由级别中间件
    router.use(function(req,res,next){
       console.log('中间件')
        next()
    })
    
    //挂载路由模块
    app.use('/',router)
    
  • 错误级别的中间件:专门用来捕获整个项目中发生的异常错误,从而防止项目异常崩溃的问提格式:错误级别中间件的function处理函数中,必须有4个形参,形参顺序从前到后分别为(err,req,res,next)————————————错误级别中间件必须注册在所有路由之后
    
    //导入express模块
    const express=require('express')
    
    //创建web服务器
    const app=express()
    //挂载路由
    app.get('/',(req,res)=>{//监听get请求
        throw new Error('服务器内部发生错误') //new认为抛出一个自定义错误-----程序无法执行就
        res.send('处理函数 这是服务器给的 响应客户端的根url的get请求')
    })
    //定义错误级别的中间件 捕获整个项目中的错误
    app.use(function(err,req,res,next){
        console.log('错误!'+err.message)
        res.send('Error!'+err.message)
    })
    
    //启动服务器、使用80端口
    app.listen(80,()=>{
        console.log('http://127.0.0.1 启动成功')
    })
  • Express官方内置的中间件express.static快速托管项目中下静态资源,例如HTML文件、图片、CSS样式(无兼容性,任何版本都可以使用express.json解析json格式的请求数据(有兼容性,在4.16.0+版本可用express.urlencoded解析URL-encoded格式的请求数据(有兼容性,在4.16.0+版本可用))配置解析application/x-222-form-urlencoded格式数据的内置中间件
app.use(express.static(path.join(__dirname,'../静态资源1')))//这里有一个缺省值 是127.0.0.1 根目录
app.use(express.json())
//配置解析application/x-222-form-urlencoded格式数据的内置中间件
app.use(express.urlencoded({extended:false}))

通过 postman或者其他软件(我使用了postwoman)向服务器发送请求体数据,看服务器是否可以拿到数据,请求体数据放在body面板中进行发送,服务器通过req.body属性接收客户端发送的请求体(表单数据),如果不配置解析表单数据的中间件,则req.body默认等于undefined-------是固定写法

express.json解析json格式的请求数据 

const express=require('express')
const app=express()
//其他中间件在路由之前配置解析json数据表单数据的中间件
app.use(express.json())//挂载在req上

//定义一个路由 --在路由中得到请求到服务器的时间
app.post('/user',(req,res)=>{
    res.send('服务器响应:OK')
    //在服务器中使用
    console.log(req.body)//属性去接收客户端的发送来请求体的数据——默认情况下,如果不配置解析表单数据的中间件,则req.body默认等于undefined
})


app.listen(80,()=>{
    console.log('服务器启动成功:127.0.0.1')
})

 express.urlencoded解析URL-encoded格式的请求数据(有兼容性,在4.16.0+版本可用)-键值对)app.use(express.urlencoded({extended:false---不使用第三方解析方式,只是自身的解析方式,如果是true就使用第三方解析}))-客户端提交的请求体数据是什么样子的,服务器端获取解析表单的数据才会是=使得服务器端的req.body有数据-------解析完成会挂载到req.body属性上

const express=require('express')
const app=express()
//其他中间件在路由之前配置解析json数据表单数据的中间件

app.use(express.urlencoded({extended:false}))

//定义一个路由 --在路由中得到请求到服务器的时间
app.post('/c',(req,res)=>{
    res.send('服务器响应:OK')
    //在服务器中使用
    console.log(req.body)//属性去接收客户端的发送来请求体的数据——默认情况下,如果不配置解析表单数据的中间件,则req.body默认等于undefined
})


app.listen(80,()=>{
    console.log('服务器启动成功:127.0.0.1')
})

 

  • 第三方中间件         不是官方内置的是第三方开发出来的中间件,可以按照需求进行下载配置,在express@1.16.0之前的版本中,经常使用body-parser这个第三方中间件,来解析请求体数据 。使用步骤:运行npm install body-parser (解析表单数据-)安装中间件--与内置中间件很相似)——使用require导入中间件——使用app.use()注册并使用中间件 ----所以注意Express内置的中间件express.urlencoded中间件,就是基于body-parser这个第三方中间件进一步封装起来的                                                                                                                                                          
    const express=require('express')
    //创建服务器
    const app=express()
    //导入解析表单数据的中间件
    const parser=require('body-parser')
    //使用app.use注册中间件
    app.use(parser.urlencoded({extended:false}))
    
    //定义一个路由
    app.post('/user',(req,res)=>{
        res.send('路由ok')
        console.log(req.body)//接收数据---默认是undefined--需要进行解析表单数据的接收配置
    })
    
    
    app.listen(80,()=>{
        console.log('服务器启动成功 127.0.0.1')
    })
                                                     

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值