2016-08-01 16 views
1

我正在使用一個NodeJS服務器,我試圖使用多個socket.emit,但每次我嘗試這樣做時,我都會在'插座'。和TypeError:無法讀取undefined的'on'屬性。有沒有辦法解決這個問題,並保持兩個socket.emits?'socket'上缺少錯誤處理程序。和typeerror:無法讀取屬性未定義

一些服務器的代碼被打破的:大量的時間只是把隨機碼後

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

好吧,我到處都來到了這個解決方案:

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

包含確切的錯誤信息 –

+0

@ suraj99934你是什麼意思? – frenchtoaster10

+0

包含在控制檯上打印的確切錯誤堆棧 –

回答

0

我認爲這個問題是「套接字不定義」。嘗試如下。

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

nope我只是試了一下,它仍然拋出相同的錯誤 – frenchtoaster10

+0

用'video'你有同樣的麻煩。 –

+0

沒有據我所知它只有套接字視頻是另一部分,並在此之前工作 – frenchtoaster10

相關問題