connect基本思路
app.use方法入栈
1
2
3
4
5
6
7
8
9
10
11var app = connect();
// 第一个中间件
app.use('/app', function fn1(req, res, next){
next();
});
// 第二个中间件
app.use('/app/list', function fn2(req, res, next){
next();
})
// app作为接收到请求的事件函数 被调用
http.createServer(app).listen(3000)执行第一个中间件
1
2
3
4
5var route = {
route: '/app',
handle: fn1
}
app.stack.push(route)执行第二个中间件
1
2
3
4
5var route = {
route: '/app/list',
handle: fn1
}
app.stack.push(route)访问的时候 调用next出栈
1
2
3
4
5//访问路径是app
/app
app内部调用定义的next方法
1. 出栈添加的中间件
2. 查看当前中间件的route是否在当前的访问路径中 继续next 直到没有可以出栈的中间件为止
基本框架
1 | var EventEmitter = require('evnets').EventEmitter; |
TODO
- 为啥每次修改 req.url
- 其他容错处理