whu12yz / tech_blog

一些技术总结和源码解读
1 stars 0 forks source link

express源码解析 #5

Open whu12yz opened 5 years ago

whu12yz commented 5 years ago

express原理分析

基于express 4.16.4版本
主要从以下几个方面进行详细讲解:

模块提供app.set, app.use, app.route, app.enable, app.disable, app.render, app.listen, app.engine等方法 其中app.use, app.get, app.post, app.route等方法实际上就是调用route的相应方法,实现相应路径处理中间件的注册。后面会说到route的这些方法都做了那些事情。

request

// 源码
var req = Object.create(http.IncomingMessage.prototype)
...
module.exports = req

request 相对比较简单,express以http.IncomingMessage.protoType为原型,创建了一个新的req对象。并在其之上添加一些方法和一些获取头部信息的getter

layer实例主要有如下属性:

route

每一个路径创建一个route route有dispatch,all等方法, route里面每一个中间件对应添加了一个layer实例,设置当前路径为根路径及其对应的的处理函数

route实例对应的属性

至此,express的所有模块咱们就说完了。中间件和路由的思想是express的核心,整个中间件的执行过程也j借鉴了node.js流式Steam处理的思想,从前往后逐个处理修改参数或者返回结果。express的灵活之处在于,可以在请求的任意环节添加任意中间件进行我们想要的处理。后续我会继续写koa的源码解析。一步一步剖析现在主流node.js框架的实现。