Node——express 中间件原理
Posted cnloop
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Node——express 中间件原理相关的知识,希望对你有一定的参考价值。
function express() {
var funcs = []; // 待执行的函数数组
var app = function (req, res) {
var i = 0;
function next() {
var task = funcs[i++]; // 取出函数数组里的下一个函数
if (!task) { // 如果函数不存在,return
return;
}
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);
app() //模拟一个http请求
express() 执行之后返回的是一个函数,函数作为对象也可以拥有属性,所以添加了 use 属性,use 的作用是往函数数组 funcs 中添加回调函数
当我们用 app() 模拟一次 http 请求,程序会走 next(),当我们自定义的中间件中有 next 关键字,之后程序会一直处于递归状态,直到 return 或者执行到函数末尾,然后逐一跳出每层递归函数
这样的递归结构,需要三个东西支撑:req、res、next,因为 req、res 保证了上下文一致,而 next 函数保证了中间件的往下执行
以上是关于Node——express 中间件原理的主要内容,如果未能解决你的问题,请参考以下文章
Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段