zoukankan      html  css  js  c++  java
  • nodejs框架 Express中间件理解

    Express中间件:用于处理请求的,本质就是个函数,类似请求拦截,处理不同请求的拦截

    详细看下面代码
    const express = require('express');
    const app = express();
    const fs = require('fs');
    
    // 中间件:处理请求的,本质就是个函数,类似请求拦截 app.all() 所有请求都会进入
    
    /**
     * 1、在Express中,对中间件有几种分类
     *         不关心请求路劲和请求方法的中间件
     *         也就是说任何请求都会进入这个中间件
     *         中间件本身是一个方法,该方法接收3个参数
     *         request 请求对象
     *         response 响应对象
     *         next 下一个中间件(中间件可以有多个)
     * 2、当一个请求进入一个中间件之后,如果不调用next 则会停留在当前中间件
     * 所以next是一个方法,用来调用下一个中间件
     * 3、next 方法也是要调用匹配的(不是调用紧挨着的中间件)
     */
    
    app.use(function(req,res,next){
        console.log('请求进来了1');
        // 执行下一个中间件 ↓
        next();
    })
    
    app.use(function(req,res,next){
        console.log('请求进来了2');
        next();
    })
    
    // ========================== 举例:第三方插件 body-parse 用于解析post请求 ==================================
    // 使用方法 app.use('bodyParse');
    app.use(function(req,res,next){
        // 判断请求方式为post,解析请求参数,在req上添加属性 body为参数
        req.body = {
            id:'1'
        }
        // 调用下一个中间件
        next();
    })
    
    // 下面展示post请求
    app.post('/post',function(req,res,next){
        // 这里就可以获取到body-parse 解析的参数了
        console.log(req.body);
    })
    
    // ========================== 举例:第三方插件 body-parse 用于解析post请求 ==================================
    
    // 以 /xxx 开头的中间件 例如: localhost:5000/a/login (不严格,只判断开头为/a的进入)
    app.use('/a',function(req,res,next){
        console.log(req.url)
    })
    
    // 除了以上中间件之外,还有一种最常用的
    // 严格匹配请求方法和请求路径的中间件
    // app.get
    // app.post
    
    app.get('/',function(req,res,next){
        console.log('/');
    })
    
    app.post('/a',function(req,res,next){
        console.log('/a');
    })
    
    // 错误处理
    app.get('/aaa',function(req,res,next){
        fs.readerFile('/aa/bb/cc',(err,data)=>{
            if(err){
                // 当我们调用next传入了参数,就会跳过其他中间件直接进入错误处理中间件
                next(err);
            }
        })
    })
    
    // 错误处理中间件 错误中间件有4个参数,当调用 next(err) 传入了参数 就会进入错误处理中间件
    app.use(function (err, req, res, next) {
      console.error(err)
      res.status(500).send('Something broke!')
    })
    
    // app.get、app.post、express.Router 都是中间件
    // 如果没有没有匹配的中间件,则Express 会默认输出:Cannot GET 路径
    
    
    app.listen(5000,()=>{
        console.log('服务启动成功')
    })
    
    
    
     
    
    
    
     
     
  • 相关阅读:

    链表
    队列
    稀疏数组
    SQL——流程控制
    SQL——存储过程与函数
    SOA
    MVC模式
    《一线架构师实践指南》--阅读笔记三
    《一线架构师实践指南》-阅读笔记二
  • 原文地址:https://www.cnblogs.com/liangziaha/p/15338612.html
Copyright © 2011-2022 走看看