express中间件

express的中间件简单实现

在使用express时,中间件是必须使用的,有时候需要自己写一个中间件,express是如何实现中间件的呢,下面一个简单的实现demo。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
var http = require('http');

function express() {

var funcs = []; // 待执行的中间件数组

var app = function (req, res) {
var i = 0;

function next() {
var task = funcs[i++]; // 取出中间件数组里的下一个函数
if (!task) { // 如果函数不存在,return
return void 0;
}
task(req, res, next); // 否则,执行下一个函数
}

next();
}

// 使用中间件函数
app.use = function (task) {
funcs.push(task);
}

return app; // 返回实例
}

// 下面是测试case

var app = express();
http.createServer(app).listen('3000', function () {
console.log('listening 3000....');
});

function middlewareA(req, res, next) {
console.log('middlewareA before next()');
next();
console.log('middlewareA after next()');
}

function middlewareB(req, res, next) {
console.log('middlewareB before next()');
next();
console.log('middlewareB after next()');
}

function middlewareC(req, res, next) {
console.log('middlewareC before next()');
next();
console.log('middlewareC after next()');
}

app.use(middlewareA);
app.use(middlewareB);
app.use(middlewareC);