在Express 4.x 中,通过router.use可以使用router级别的中间件,通过什么方式可以实现类似 router.unuse 的功能,来取消使用这个中间件。
这个过程都是在系统运行时进行的,答案不能是删掉相关代码重启应用哟。
刚略了下express的代码,有一个可行的办法:
遍历 router.stack
,找到router.stack[i].handle
=== 这个中间件的元素,删掉它就可以了。
不知道这样做有什么隐患,或者还有木有更好的方法。
proto.use = function(route, fn){ // default route to ‘/’ if (‘string’ != typeof route) { fn = route; route = '/’; }
if (typeof fn !== ‘function’) { var type = {}.toString.call(fn); var msg = 'Router.use() requires callback functions but got a ' + type; throw new Error(msg); }
// strip trailing slash if (‘/’ == route[route.length - 1]) { route = route.slice(0, -1); }
var layer = new Layer(route, { sensitive: this.caseSensitive, strict: this.strict, end: false }, fn);
// add the middleware debug('use %s %s’, route || '/’, fn.name || ‘anonymous’);
this.stack.push(layer); return this; };
//this.stack.push(layer); 从router.stack 里面把LAYER删掉。可自写方法 EXPRESS/LIB/ROUTER/INDEX.JS