Express 中间件原理

middleware 中间件是express中最优雅的特性,它让中间件如此的无形,无形是由于不经意间开发了middleware却浑然不知,这很符合老子的无为而治的哲学思想。在express中(几乎)一切都是中间件。下面我们实际的开发个中间件:

var express = require('express');
var app = express();

// 中间件 01
function middle01(req,res,next){
    req.siteName = "jsera.net - 开辟Javascript新纪元的网络平台";
    next();
}


// 中间件 02
function middle02(){
    var accessNum = 0;
    return function(req,res,next){
        accessNum += 1;
        req.accessNum = accessNum;
        next();
    }
}

app.use(middle01);
app.use(middle02());

app.get("/",function(req,res){
    res.send(req.siteName + "\n" + "网站访问人数:" + req.accessNum);

})

app.listen(3000);

代码有些长,并不复杂。 middle01 中间件的作用是,都会为每个req请求添加一个 siteName属性,调用next() 方法表示继续,如果不调用,浏览器就没有反应一直处于请求当中。

middle02 中间件有一点绕,它本身不是中间件实体,当执行它时,会return一个中间件函数,属于一个闭包,它的作用是每次有请求时,都会给req请求对象加入一个 accessNum 属性,这个属性每次都会 +1 。

运行服务器后,刷新网页多次,会得到下面的结果:

jsera.net - 开辟Javascript新纪元的网络平台 网站访问人数:12

12 说明刷新了12次。

 在express中(几乎)一切都是中间件 ,路由器不也是中间件么,体会之后发现确实如此。

插件内部原理,在我们自己开发的 stuwebfk 中已详细介绍过。