Express 有个 router.use(),有木有方法实现类似 router.unuse()来撤销router.use ?
发布于 5 年前 作者 sarike 3900 次浏览 最后一次编辑是 3 年前

在Express 4.x 中,通过router.use可以使用router级别的中间件,通过什么方式可以实现类似 router.unuse 的功能,来取消使用这个中间件。

这个过程都是在系统运行时进行的,答案不能是删掉相关代码重启应用哟。

5 回复

刚略了下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

其实可以看一下源码,楼上也给出了,可以考虑自己发个merge request

当我执行 mysql.query(sql,callback); 的时候。。。

就很慢的刷新页面没有错误。。。但是在我不停的刷新页面的时候。。。。控制台就报错了。 错误提示如下图: err1.png

然后我去看了看 mysql错误提示的地方

err2.png

不知道为什么。。。只要快速刷新页面, 过一会就报错一下。然后我express.send 也跟着报错。好像是在send设置响应头部的时候,已经有内容输出了。 但是 我 console.log(mysql err); 完全没错误任何东西。不是null 。

下面是全部错误。 err3.png

@lixuewu 这不是个MYSQL库错误。肯定是你的代码里,两次执行了。res.header = xxxx。或者类似错误

回到顶部