Nest: How to use socketIO middlewares

Created on 6 Sep 2018  路  4Comments  路  Source: nestjs/nest

This is a common way to use socketio-wildcard in the doc

var io         = require('socket.io')();
var middleware = require('socketio-wildcard')();

io.use(middleware);

io.on('connection', function(socket) {
  socket.on('*', function(packet){
    // client.emit('foo', 'bar', 'baz')
    packet.data === ['foo', 'bar', 'baz']
  });
});

io.listen(8000);

How can I achieve it with Nest like:

...
import socketioWildcard from 'socketio-wildcard'
....

@SubscribeMessage('*')
onEvent(): Observable<WsResponse<number>> {
    return from([1, 2, 3]).pipe(
          map(item => ({ event: 'events_from_server', data: item })),
     )
}

Most helpful comment

Base on the error, I resolve this problem by:

import { IoAdapter } from '@nestjs/websockets'
import { EventEmitter } from 'events'
import * as socketioWildcard from 'socketio-wildcard'
import { Server } from 'socket.io'

export default class WildcardsIoAdapter extends IoAdapter {
    createIOServer(port: number, options?: any): any {
        const server: Server = super.createIOServer(port, options)
        server.use(socketioWildcard(EventEmitter))
        return server
    }
}

All 4 comments

See https://docs.nestjs.com/websockets/adapter Extend socket.io chapter.
For example:

export class WildcardsIoAdapter extends IoAdapter {
  createIOServer(port: number, options?: any): any {
    const server = super.createIOServer(port, options);
    server.use(middleware);
    return server;
  }
}

@kamilmysliwiec It does not work!

/Users/jackple/Documents/node/showcase/node_modules/socketio-wildcard/index.js:6
  var emit = Emitter.prototype.emit
                               ^
TypeError: Cannot read property 'emit' of undefined
    at Array.module.exports (/Users/jackple/Documents/node/showcase/node_modules/socketio-wildcard/index.js:6:32)
    at run (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/namespace.js:124:11)
    at Namespace.run (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/namespace.js:136:3)
    at Namespace.add (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/namespace.js:164:8)
    at Client.doConnect (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/client.js:97:20)
    at Client.connect (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/client.js:66:17)
    at Server.onconnection (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/index.js:434:10)
    at emitOne (events.js:116:13)
    at Server.emit (events.js:211:7)
    at Server.handshake (/Users/jackple/Documents/node/showcase/node_modules/engine.io/lib/server.js:338:8)
    at /Users/jackple/Documents/node/showcase/node_modules/engine.io/lib/server.js:232:12
    at Server.checkRequest (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/index.js:76:51)
    at Server.verify (/Users/jackple/Documents/node/showcase/node_modules/engine.io/lib/server.js:168:17)
    at Server.handleRequest (/Users/jackple/Documents/node/showcase/node_modules/engine.io/lib/server.js:222:8)
    at Server.<anonymous> (/Users/jackple/Documents/node/showcase/node_modules/engine.io/lib/server.js:467:14)
    at Server.<anonymous> (/Users/jackple/Documents/node/showcase/node_modules/socket.io/lib/index.js:343:16)

Base on the error, I resolve this problem by:

import { IoAdapter } from '@nestjs/websockets'
import { EventEmitter } from 'events'
import * as socketioWildcard from 'socketio-wildcard'
import { Server } from 'socket.io'

export default class WildcardsIoAdapter extends IoAdapter {
    createIOServer(port: number, options?: any): any {
        const server: Server = super.createIOServer(port, options)
        server.use(socketioWildcard(EventEmitter))
        return server
    }
}

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

menme95 picture menme95  路  3Comments

yanshuf0 picture yanshuf0  路  3Comments

thohoh picture thohoh  路  3Comments

JulianBiermann picture JulianBiermann  路  3Comments

2233322 picture 2233322  路  3Comments