egg
egg copied to clipboard
使用egg-scoket.io报错 Middleware must be composed of functions!
What happens?
使用egg ^2.29.1+egg-socket.io ^4.1.6的时候,一直报Middleware must be composed of functions! 都是按官网配置的,然后通过报错信息,找到了源码中的io.js,发现了一个有点诡异的问题。这边报错的关键点在于io.js中查找sessionMiddleware这里:
const sessionMiddleware = app.middleware.filter(mw => {
return mw._name && mw._name.startsWith('session');
})[0];
打印出来是undefined,但是如果把[0]去掉,是可以打印[AsyncFunction (anonymous)]的,而且如果把filter()[0]改成find(),也能找到对象。我尝试打印如下代码:
let zzz = app.middleware.filter(mw => {
return mw._name && mw._name.startsWith('session');
})
console.log(zzz.length); //2
console.log(zzz[0]); //undefined
console.log(zzz); //[AsyncFunction (anonymous)]
实在匪夷所思,可否请有经验的老师给予解释。
补充一下,我把版本从4.1.6改成4.0.0,就正常运行了。但这种诡异的BUG依然无法理解,浪费了一下午。