2016-08-01 25 views
1

Ich arbeite an einem NodeJS-Server und ich versuche, mehr als eine socket.emit zu verwenden, aber jedes Mal, wenn ich das versuche, bekomme ich einen Fehlenden Fehlerhandler ' Steckdose'. und TypeError: kann die Eigenschaft 'on' von undefined nicht lesen. Gibt es eine Möglichkeit, dies zu beheben und beide socket.emits zu behalten?Fehlender Fehlerhandler auf "Socket". und typeerror: kann die Eigenschaft 'on' von undefined nicht lesen

Einige der Code für den Server, der gebrochen wird:

listener.sockets.on('connection', function(socket){ 
    //send data to 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 to youtube-dl. 
       ['--format=18'], 
       // Additional options can be given for calling `child_process.execFile()`. 
       { cwd: __dirname }); 

      // Will be called when the 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 be 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 is the image of the error

ok nach viel Zeit nur darum, Random-Code überall kam ich zu dieser Lösung:

listener.sockets.on('connection', function(socket){ 
    //send data to 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 to youtube-dl. 
       ['--format=18'], 
       // Additional options can be given for calling `child_process.execFile()`. 
       { cwd: __dirname }); 

      // Will be called when the 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 be 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')); 
     } 



    }); 
+0

enthalten genaue Fehlermeldung –

+0

@ suraj99934 was meinst du genau? – frenchtoaster10

+0

Fügen Sie den genauen Fehler Stack auf der Konsole –

Antwort

0

Ich denke, dass das Problem "Sockel ist nicht definiert" ist. Versuchen Sie wie folgt.

listener.sockets.on('connection', function(socket){ 
    socket.on('client_data', function(data){ ... }); // here socket is define 
    ... 
    //send data to client 
    setInterval(function(){ 
     socket.emit('date', {'date': new Date()}); 
    }, 1000); 
}); 
+0

Nö ich habe es gerade versucht und es wirft immer noch den gleichen Fehler – frenchtoaster10

+0

Mit 'video' haben Sie ein gleiches Problem. –

+0

Nein, soweit ich weiß, ist es nur mit Buchse Video Teil eines anderen und arbeitete davor – frenchtoaster10