egg-socket.io无法handle路由?
发布于 8 天前 作者 microud 172 次浏览 来自 问答

先上代码: app/config/config.default.js:

config.io = {
        namespace: {
            '/': {
                connectionMiddleware: [ 'auth' ],
                packetMiddleware: [ 'filter' ],
            }
        },
    };

app/io/middleware/filter.js:

module.exports = app => {
    return async (ctx, next) => {
        ctx.socket.emit('res', 'packet received!');
        console.log('packet:', ctx.packet);
        await next();
    };
};

app/io/router.js

module.exports = app => {
    // app.io.of('/')
    app.io.route('chat', app.io.controller.chat.index);
};

app/io/controller/chat.js

module.exports = app => {
    class Controller extends app.Controller {
        async index() {
            const message = this.ctx.args[0];
            console.log('chat :', message + ' : ' + process.pid);
            this.ctx.socket.emit('res', message);
        }
    }
    return Controller;
};

相关代码就在这里了,下面讲出现的问题: 客户端emit消息之后,filter可以输出包的内容,内容如下:

packet: [ 'chat', 'Connect to server' ]
packet: [ 'chat', 'Hello world!' ]
packet: [ 'chat', 'Hello world!' ]
packet: [ 'chat', 'Hello world!' ]

但是对应的chat“路由”并没有执行,controller中的函数没有任何输出信息,也没有执行emit,整个的代码可以看作是完全复制了文档里的代码,搞了大半天无果,不知道有没有大佬能指点一二。谢了。

1 回复

https://github.com/eggjs/egg/issues/1789

并没有这个文件(app/io/router.js)的约定只有 app/router.js

回到顶部