zoukankan      html  css  js  c++  java
  • express中间件

    1. 中间件是一个模块。在js中,模块意味着函数,所以中间件是一个函数。那么这个函数长什么样子? 这还要从中间件的功能说起,它拦截http 服务器提供的请求和响应对象,执行逻辑,然后或者结束响应,或者把它传递给下一个中间件组件。

    拦截http服务器提供的请求和响应对象,这表明它必须接受两个参数: 请求对象(req),响应对象(res),就是http.createServer回调函数中的两个参数;

    执行逻辑,就是在函数内对请求和响应对象进行操作;

    或者把它传递给下一个中间件组件,那么它还有一个可选的参数, next,  它是一个回调函数,在函数内部调用,就表示这个组件已经完成了它的工作,可以执行下一个中间件了。

    根据描述,创建两个简单的中间件:logger将请求输出到控制台中,hellohello world 作为请求的响应

    // logger中件间,有next参数

    let logger =function(req,res,next){

        console.log(req.url);

        next();

    }

    // hello 中间件,没有next 参数。

    let hello = function(req,res){

        res.setHeader(200, {"content-type": "text/html"});

        res.end("hello world");

    }

      2, 中间件的使用。

      新建node 文件夹, npm init -y快速创建package.json文件。npm install express --save 安装express. 创建index.js 文件如下

      let express = require("express"); // 引入express

    let app = express(); // connect() 创建服务器。

     

    // logger中件间,有next参数

    let logger =function(req,res,next){

        console.log(req.url);

        next();

    }

    // hello 中间件,没有next 参数。

    let hello = function(req,res){

        res.writeHeader(200, {"content-type": "text/html"});

        res.end("hello world");

    }

     

    // use使用中间件

    app.use(logger);

    app.use(hello);

    app.listen(8080)

     这时调用cmd命令窗口,输入node index 启动服务器,浏览器中输入localhost:8080, 可以看到hello world,同时控制台中输出 /. 我们用中间件的方式重写了hello world 程序。

    3, 中间件使用的有序和无序

    中间件可以无序地使用,app.use(logger) 和app.use(hello) 调换一下位置试一下。

      重启node 服务器,可以看到页面中仍然有hello world, 我们的程序仍然是正常运行的。但是我们的控制台中没有任何输出,logger 没有起作用,这很好理解,因为hello函数中没有next 方法,当它里面的逻辑执行完以后,就不能执行下一个中间件了。这也表明中间件的顺序非常重要。

      还有一个是错误处理,如果一个中间件中存在错误,那么它就会简单地向下传递,如果最生一个中间件还是没有处理,它就会一直存在,所以一般错误处理中间件都是放到最后,如果有任何错误,都会进行处理,不会使程序崩溃。

      总结:虽然中间件可以无序的使用,但是我们必须给它规化好顺序,让它按照我们指定的顺序依次执行,以达到我们想要的效果。

      4, 中间件的挂载。

      以上说的都是中间件的易于调用,这里说一下中间件的挂载。所谓挂载,就是在使用中间件的时候,在它前面添加一个路径,只有在请求的url 中带有此路径,才会调用这个中间件,那么app.use 方法就需要接受两个参数,第一个参数就是路径,第二个参数就是中间件,如 app.use("admin", admin) 添加一个admin 中间件

      这时在浏览器地址栏中输入localhost:8080, 可以看到hello world,证明并没有执行admin中间件。当输入localhost:8080/admin时,可以看到try user ,表明它执行了admin中间件,且是第一个case, 再输入localhost:8080/admin/user,可以看到 hello user. 它还是执行了admin 中间件,第二个case. 挂载,就是给这个中间件定义一个路径,只有在访问该路径的时候,它才执行。

      5, 创建可以配置的中间件,使它更加通用和重用,有利于应用程序的快速开发。

      为了创建可以配置的中间件,中间件都会遵循一个原则:用函数去返回中间件函数,就是我们上面写的中间件比如logger 要包在一个函数里面,使用中间件的时候,要用到函数的调用来返回这个中间件。

  • 相关阅读:
    Linux安装ElasticSearch,Elasticsearch安装辅助插件,IK分词器安装,使用IK分词器
    springBoot高级:自动配置分析,事件监听,启动流程分析,监控,部署
    dubbo:分布式系统中的相关概念,服务提供者,服务消费者,dubbo高级特性
    Maven高级:分模块开发与设计,聚合,集成,属性,版本管理,多环境开发配置和跳过测试,私服搭建
    springMVC:校验框架:多规则校验,嵌套校验,分组校验;ssm整合技术
    springMVC:异步调用,异步请求跨域访问,拦截器,异常处理,实用技术
    Web全段重点整理
    spring事务:事务控制方式,使用AOP控制事务,七种事务传播行为,声明事务,模板对象,模板对象原理分析
    Java基础技术基础面试【笔记】
    高级知识点:多线程,资源管理【笔记】
  • 原文地址:https://www.cnblogs.com/Bob2017/p/10263155.html
Copyright © 2011-2022 走看看