egg icon indicating copy to clipboard operation
egg copied to clipboard

使用egg-scoket.io报错 Middleware must be composed of functions!

Open SimbaZZX opened this issue 5 years ago • 1 comments

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)]

实在匪夷所思,可否请有经验的老师给予解释。

SimbaZZX avatar Dec 26 '20 09:12 SimbaZZX

补充一下,我把版本从4.1.6改成4.0.0,就正常运行了。但这种诡异的BUG依然无法理解,浪费了一下午。

SimbaZZX avatar Dec 26 '20 10:12 SimbaZZX