专栏名称: 寒东设计师
前端工程师
目录
相关文章推荐
广西头条NEWS  ·  “广西三月三”攻略出炉,嗨玩不停歇 ·  17 小时前  
天津市文化和旅游局  ·  关于桃花园、桃诗园、北洋园、西沽公园暂时闭园的通知 ·  昨天  
桂林广播电视台飞扬883  ·  桂林这条“会开花的河”已经完成升级改造! ·  昨天  
湛江日报  ·  放假通知:连休4天!(不是所有人) ·  2 天前  
湛江日报  ·  放假通知:连休4天!(不是所有人) ·  2 天前  
51好读  ›  专栏  ›  寒东设计师

Express中间件原理详解

寒东设计师  · 掘金  ·  · 2018-03-13 03:38

正文

Express中间件原理详解

前言

Express和Koa是目前最主流的基于node的web开发框架,他们的开发者是同一班人马。貌似现在Koa更加流行,但是仍然有大量的项目在使用Express,所以我想通过这篇文章说说Express中间件的原理。

中间件的功能和分类

中间件的本质就是一个函数,在收到请求和返回相应的过程中做一些我们想做的事情。Express文档中对它的作用是这么描述的:

执行任何代码。
修改请求和响应对象。
终结请求-响应循环。
调用堆栈中的下一个中间件。

分类

Express文档中把他们分为了五类,但是他们的原理相同,只是用法不同:

应用级中间件
路由级中间件
错误处理中间件
内置中间件
第三方中间件

中间件的原理

首先我们看看中间件的用法:

var express = require('express')
var app = express();
app.use('/user', function (req, res, next) {
  //TODO
  next();
});
app.listen(8080)

接下来我们对比看一下下源码:

与中间件有关的有三部分:

  • express.js继承application.js并对外暴露接口
  • application.js挂载了所有核心方法
  • router文件夹处理路由逻辑

先看express.js的代码:

这部分代码中最重要的是红色方框部分, mixin 是一个第三方库。可以简单理解为继承(实际上它不是继承而是混合)。

接下来我们看application.js:

我把文件下载下来并且删去了注释,通过这张图我们可以看出这个文件的作用是挂载了所有的方法(包括use等关键api)。
这里面比较重要的是 use 方法,它的作用就是把我们用 app.use 注册的所有中间件和路由方法交给 Router 类来处理。
那我们再看看router文件夹类的结构:

index.js是入口文件,处理所有的路由;
layer.js中声明了 Layer 类,处理每一层路由中间件或者每一个子中间件;
router.js中声明了 Router 类,处理每一个子路由。







请到「今天看啥」查看全文