javascript - Missing error handler on 'socket'. and typeerror: cannot read property 'on' of undefined -


i'm working on nodejs server , i'm trying use more 1 socket.emit every time try missing error handler on 'socket'. , typeerror: cannot read property 'on' of undefined. there way fix , keep both of socket.emits?

some of code server broken:

listener.sockets.on('connection', function(socket){     //send data client     setinterval(function(){         socket.emit('date', {'date': new date()});     }, 1000);      var size = 0;      //recieve client data     socket.on('client_data', function(data){         socket.emit('returnvar', {'returnvar': data.letter});         socket.broadcast.emit('returnvar', {'returnvar': data.letter});         process.stdout.write(data.letter);          var res1 = data.letter.split("",13);          if(res1 == "h,t,t,p,s,:,/,/,y,o,u,t,u" || res1 == "h,t,t,p,s,:,/,/,w,w,w,.,y" ){              process.stdout.write("googogoogogogogoogogoogogogogoogogo");              var video = youtubedl(data.letter,                 // optional arguments passed youtube-dl.                 ['--format=18'],                 // additional options can given calling `child_process.execfile()`.                 { cwd: __dirname });              // called when download starts.             video.on('info', function(info) {                 console.log('download started');                 console.log('filename: ' + info._filename);                 console.log('size: ' + info.size);                 size = info.size;             });              video.pipe(fs.createwritestream('video.mp4'));         }          var pos = 0;          video.on('data', function data(chunk) {             'use strict';             pos += chunk.length;              // `size` should not 0 here.             if (size) {                 var percent = (pos / size * 100).tofixed(2);                 process.stdout.cursorto(0);                 process.stdout.clearline(1);                 process.stdout.write(percent + '%');                 socket.emit('returnvar1', {'returnvar1': percent + '%'});                 socket.broadcast.emit('returnvar1', {'returnvar1': percent + '%'});             }         });      }); 

here image of error

ok after lots of time putting random code everywhere came solution:

    listener.sockets.on('connection', function(socket){     //send data client     setinterval(function(){         socket.emit('date', {'date': new date()});     }, 1000);      var size = 0;      //recieve client data     socket.on('client_data', function(data){         socket.emit('returnvar', {'returnvar': data.letter});         socket.broadcast.emit('returnvar', {'returnvar': data.letter});         process.stdout.write(data.letter);          var res1 = data.letter.split("",13);          if(res1 == "h,t,t,p,s,:,/,/,y,o,u,t,u" || res1 == "h,t,t,p,s,:,/,/,w,w,w,.,y" ){              process.stdout.write("googogoogogogogoogogoogogogogoogogo");              var video = youtubedl(data.letter,                 // optional arguments passed youtube-dl.                 ['--format=18'],                 // additional options can given calling `child_process.execfile()`.                 { cwd: __dirname });              // called when download starts.             video.on('info', function(info) {                 console.log('download started');                 console.log('filename: ' + info._filename);                 console.log('size: ' + info.size);                 size = info.size;             });                var pos = 0;          video.on('data', function data(chunk) {             'use strict';             pos += chunk.length;              // `size` should not 0 here.             if (size) {                 var percent = (pos / size * 100).tofixed(2);                 process.stdout.cursorto(0);                 process.stdout.clearline(1);                 process.stdout.write(percent + '%');                 socket.emit('returnvar1', {'returnvar1': percent + '%'});                 socket.broadcast.emit('returnvar1', {'returnvar1': percent + '%'});             }         });              video.pipe(fs.createwritestream('video.mp4'));         }        }); 

i think problem "socket not define". try below.

listener.sockets.on('connection', function(socket){     socket.on('client_data', function(data){ ... }); // here socket define     ...      //send data client     setinterval(function(){         socket.emit('date', {'date': new date()});     }, 1000); }); 

Comments