zoukankan      html  css  js  c++  java
  • [express.js学习笔记]理解Router

    (本文内容纯属个人理解,仅供学习探讨)

    博主的工作用的是Java Web,私下对JavaScript很感兴趣,也就接触了Node.js,听过Node一般使用Express来搭建Web服务器,就找到了Express,开始阅读文档和例子。

    发现官方文档API页面的导航列出了express的几个核心的类(对象):

    1. express

    2. Application

    3. Request

    4. Response

    5. Router

    其中,按照我的理解,express是一个Application对象的工厂类,其实它还是Router对象和serve-static中间件的工厂类;

    另外的Application,Request,Response类比Java Web,分别对应于ServletContext,HttpServletRequest,HttpServletResponse,比较好理解;

    令我比较不解的是Router,以及它与Application的关系,我只知道Router的作用是Routing(路由),我能隐约感觉到它应该是担当MVC中的Controller。

    我开始仔细的阅读文档,发现"middleware(中间件)"在文中出现的频率特别高,看来要搞清楚这个问题,得先进一步理解中间件的含义。

    于是,我开始查找“中间件”的定义。我在维基百科中看到,有不同前辈对"中间件"下过定义,抽象地讲,描述都是同一个意思,只是在不同的应用场景中有不同的具体描述。

    有一个定义是,位于网络传输层(TCP/UDP)(终端)应用程序之间的软件就称为"中间件",Web服务器就是一种"中间件",它位于传输层与运行在其上的Web应用(如一个购物网站)之间。

    "中间件"可以由很多层的"中间层"有序组成,express的Router就是用来作为独立于应用的"中间层"的对象。

    通过对比Application和Router的API,我们发现他们有很多相同的方法,作用也一样,那他们有什么关系呢?

    文档中提到了,Application中有一个内置的Router,这就解释了Application与Router为什么有那么多相同的方法。

    一个Router可以use()其他多个Router,同理一个Application可以use()多个Router。

    说Router是独立于应用的,是相对于Application中的内置Router而言,独立的Router可以被不同的应用(Application)或其他Router使用(use())。

     一个Router中可以有多个handler来处理不同route(大概相当于URI,或Java Servlet中的url-pattern,或Spring MVC的requestMapping等)和不同方法(post,get,put,delete)的请求,如果一个handler处理完之后没有作出响应(response),则应该交给下一层的handler(或者其他Router的handler)处理。

    同一个请求会被所匹配route的所有Router的所有handler按照挂载的顺序(沿着"中间件"的栈)进行处理,并沿着反方向进行响应。

    如果熟悉Java的Filter,或者Struts的Interceptor等过滤器拦截器技术的工作原理,那Router就是在express中的Filter或者Interceptor。

  • 相关阅读:
    判断整除
    洛谷2018-7月月赛
    luogu_P1177 【模板】快速排序 (快排和找第k大的数)
    lowbit() 运算
    64位整数乘法 (二进制思想)
    poj_1995 Raising Modulo Numbers (快速幂)
    poj_3179 Corral the Cows (二分+二维前缀和+离散化)
    Spring-profile 不同环境配置方法
    Spring-id,name 名称,别名关系
    Leecode no.20 合理的括号
  • 原文地址:https://www.cnblogs.com/waychan/p/5414749.html
Copyright © 2011-2022 走看看