了解 express 原理之前,你需要先掌握 express 的基本用法。
关于 express 的介绍请看 express 官网。
基本结构
先回顾一下 express 使用的的过程,首先是把模块倒入,然后当做方法执行,在返回值中调用 use
处理路由,调用 listen
监听端口。
1 | const express = require('express') |
根据上面的使用,我们开始构建代码。我们需要写一个 express
方法,返回一个 app
对象,有 use
和 listen
方法。
1 | const http = require('http') |
上面代码中的 use
方法的作用是把请求路径跟对应的处理函数存放在一个数组中,当请求到来的时候遍历数组,根据路径找到对应的方法执行。
动态路由
动态路由是根据参数可以动态匹配路径。
1 | const express = require('./express') |
根据路由里面的参数要匹配符合规则的路由我们需要使用正则来处理,下面代码是根据路径来生成正则的一个方法。
1 | const pathRegexp = (path, paramNames=[], {end=false} ={}) => { |
根据路径生成正则也是有第三方模块 path-to-regexp 模块,核心原理大家值得参考。包括 Vue 和 React 的路由都使用到了这个模块。
下面我们需要开始动态映射路由。
1 | const http = require('http') |
其中 express
会把请求的方法都代理到 app
中作为属性的方式来方便用户使用。
1 | const express = require('./express') |
express 会在请求对象中加一些属性,会把路径参数作为请求时的 params
属性,会把查询字符串作为请求时的 query
属性。大多数中间件也是这个原理,如 body-parser 模块,给它加个 body
属性即可。
通过GitHub查看代码请点击:传送门