当前位置: 首页 > 后端技术 > Node.js

express.js源码阅读笔记

时间:2023-04-03 21:09:19 Node.js

express本质上是一个封装的http.createServer回调函数express主要有以下几个核心概念applicationrouterroutelayer每个应用都会有一个router实例,这个router实例会为application的一个属性并且是一个单例,在特定场景下会被初始化,比如app.use、app.get等方法。App.use、app.get等方法本质上是调用应用程序上路由器实例上的相应方法。比如app.use实际调用的是router实例上的use方法,app.get实际调用的是router实例。路由方法。router实例上有一个stack属性,是数组类型,用来存放layer实例。该层的主要作用是存储一个路径path和该路径对应的请求处理函数fn。通过app.use(fn)(即router.use(fn))可以创建一个层,对应路径为/,fn为传入的函数。也可以通过router.route(path),对应路径为/,层存储为route.dispatch.bind(route),route为前面创建的route实例。router.route(path)会返回创建的路由实例,可以看下面的代码帮助理解app.route('/list').get((req,res)=>{res.end('helloget');}).post((req,res)=>{res.end('hellopost');}).put((req,res)=>{res.end('helloput');}).delete((req,res)=>{res.end('你好删除');});route实例上还有一个stack属性,也是数组类型,存放层数。通过调用路由实例暴露的方法,会创建一个层,比如app.route('/list').get((req,res)=>{res.end('helloget');})上面的代码在router创建的route中,会创建一个layer保存在get(fn)中fn函数的route实例上的layer。对应的path都是/,但是因为route也有path属性,所以可以理解为route上的layer对应的path是route.path+'/',根据layer的存放位置不同,一个expressapp可分为两层。中间件层由存储在路由器上的层组成。路由层由存储在路由上的层组成。路由层可以看出Do是中间层的从属层。中间件层有两种层,一种有路由属性,一种没有路由属性。在具有路由属性的层上,可以通过layer.route找到对应的路由层。当一个请求访问到快递app对应的服务器时,会调用app.handle方法,在app.handle中会调用router.handle。在router.handle中,会遍历中间件层的层层,取出每一层进行处理。如果图层上有路由属性,就会进入路由对应的路由层处理本层的所有层。处理完成后返回上层layer

猜你喜欢