在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
其实可以看一下源码,楼上也给出了,可以考虑自己发个merge request
当我执行 mysql.query(sql,callback); 的时候。。。
就很慢的刷新页面没有错误。。。但是在我不停的刷新页面的时候。。。。控制台就报错了。 错误提示如下图:
然后我去看了看 mysql错误提示的地方
不知道为什么。。。只要快速刷新页面, 过一会就报错一下。然后我express.send 也跟着报错。好像是在send设置响应头部的时候,已经有内容输出了。 但是 我 console.log(mysql err); 完全没错误任何东西。不是null 。
下面是全部错误。
@lixuewu 这不是个MYSQL库错误。肯定是你的代码里,两次执行了。res.header = xxxx。或者类似错误