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


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

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

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

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

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

    1. const express=require('express')
    2. const app=express()
    3. //其他中间件在路由之前配置解析json数据表单数据的中间件
    4. app.use(express.json())//挂载在req上
    5. //定义一个路由 --在路由中得到请求到服务器的时间
    6. app.post('/user',(req,res)=>{
    7. res.send('服务器响应:OK')
    8. //在服务器中使用
    9. console.log(req.body)//属性去接收客户端的发送来请求体的数据——默认情况下,如果不配置解析表单数据的中间件,则req.body默认等于undefined
    10. })
    11. app.listen(80,()=>{
    12. console.log('服务器启动成功:127.0.0.1')
    13. })

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

    1. const express=require('express')
    2. const app=express()
    3. //其他中间件在路由之前配置解析json数据表单数据的中间件
    4. app.use(express.urlencoded({extended:false}))
    5. //定义一个路由 --在路由中得到请求到服务器的时间
    6. app.post('/c',(req,res)=>{
    7. res.send('服务器响应:OK')
    8. //在服务器中使用
    9. console.log(req.body)//属性去接收客户端的发送来请求体的数据——默认情况下,如果不配置解析表单数据的中间件,则req.body默认等于undefined
    10. })
    11. app.listen(80,()=>{
    12. console.log('服务器启动成功:127.0.0.1')
    13. })

     

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

     

  • 相关阅读:
    MECE分析法
    位、比特、字节、字、帧等概念关系的理解
    Androidstudio文件gradle无法获取‘.pom’文件
    零代码编程:用ChatGPT批量将多个文件夹中的视频转为音频
    Python跳盆算法,来自物质结构的优化算法
    区块链产业快速发展 和数集团助力区块链应用场景落地
    2023年9月7日
    win10 安装openssl并使用openssl创建自签名证书
    单机点:Redis可以连接,但是无法写入数据
    HCIP实验(11)
  • 原文地址:https://blog.csdn.net/weixin_47295886/article/details/126691090