Express框架代码极短,自身功能极简,完全是由路由和中间件构成的一个web开放框架。
从本质上来说,一个Express应用就是在调用各种中间件。
中间件可以挂载在路由上,或者不挂载路由,方法如下:
var app = express(); // 未挂载路由,所有请求都会执行该中间件 app.use(function(req, res, nex) { req.session = 'test'; next(); }); // 挂载至路由/user/:id,任何指向/user/:id的请求都会执行该中间件。 app.use('/user/:id', function(req, res, nex) { req.session = 'test'; next(); }); // 在一个挂载点,装载一组中间件 app.get('/user/:id', function(req, res, nex) { req.session = 'test1'; next(); }, function(req, res, nex) { req.session.username = 'test2'; next(); });
中间件分为5种:应用级中间件,路由级中间件,错误处理中间件,内置中间件,第三方中间件。
上述代码是应用级中间件。路由级中间件如下:
var app = express(); var router = express.Router(); router.use(function(req, res, nex) { req.session = 'test'; next(); }); router.use('/user/:id', function(req, res, nex) { req.session = 'test'; next(); }); router.use('/user/:id', function(req, res, nex) { req.session = 'test1'; next(); }, function(req, res, nex) { req.session.username = 'test2'; next(); }); // 将路由挂载至应用 app.use('/', router);
如果当前中间件没有终结请求-响应循环,则必须调用 next() 方法将控制权交给下一个中间件,否则请求就会挂起。