Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to handle io.use middleware to capture errors on client?

I need to check authentication for my socket connection and drop one if they failed. My server and client codes looks like the following;

// server.js

var http = require('http');
var sio = require('socket.io');
var app = require('express')();

var server = require('http').createServer(app).listen(3000, function () {
    console.log('Server listening on 3000 port');
});

var io = sio.listen(server);

io.use(function (socket, next) { 
    return next(new Error('Not Authenticated'));
});

// client.js

var socket = io.connect(window.location.origin);

socket.on('connect', function () {
    console.log('socket connected')
});

My problem is I can't capture Not Authenticated error on the client side to handle it and show some popup for example.

Now if Not Authenticated error get executed on server side then socket connection still persists but none of socket.emit('message') don't any work.

How can I capture this error on client side to make some decision?

like image 688
Artem Baranovskii Avatar asked Oct 30 '25 04:10

Artem Baranovskii


1 Answers

You should catch error events clientside:

socket.on('error', function(err) {
  console.log('The server sent an error', err);
});

2021 update: for Socket.io v3 and up, errors that get passed to middleware callbacks trigger a connect_error event client side, as documented here.

like image 197
robertklep Avatar answered Nov 01 '25 14:11

robertklep



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!