节点聊天给出 throw er; //未处理的错误事件

Node chat gives throw er; //unhandled error event

所以我建立了一个小型的基本聊天系统:

服务器代码:

    var io = require('socket.io').listen(8000);

// open the socket connection
io.sockets.on('connection', function (socket) {

   // listen for the chat even. and will recieve
   // data from the sender.
   socket.on('chat', function (data) {

      // default value of the name of the sender.
      var sender = 'unregistered';

      // get the name of the sender
      var name = socket.nickname;
         console.log('Chat message by ', name);
         console.log('error ', err);
         sender = name;


      // broadcast data recieved from the sender
      // to others who are connected, but not 
      // from the original sender.
      socket.broadcast.emit('chat', {
         msg : data, 
         msgr : sender
      });
   });

   // listen for user registrations
   // then set the socket nickname to 
   socket.on('register', function (name) {

      // make a nickname paramater for this socket
      // and then set its value to the name recieved
      // from the register even above. and then run
      // the function that follows inside it.
      socket.nickname = name;

         // this kind of emit will send to all! :D
         io.sockets.emit('chat', {
            msg : "naay nag apil2! si " + name + '!', 
            msgr : "mr. server"
      });
   });

});

客户端:

<html>
   <head>
      <script src="http://localhost:8000/socket.io/socket.io.js"></script>
      <script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
      <script>
         var name = '';
         var socket = io.connect('http://localhost:8000');

         // at document read (runs only ones).
         $(document).ready(function(){
            // on click of the button (jquery thing)
            // the things inside this clause happen only when 
            // the button is clicked.
            $("button").click(function(){

               // just some simple logging
               $("p#log").html('sent message: ' + $("input#msg").val());

               // send message on inputbox to server
               socket.emit('chat', $("input#msg").val() );

               // the server will recieve the message, 
               // then maybe do some processing, then it will 
               // broadcast it again. however, it will not 
               // send it to the original sender. the sender
               // will be the browser that sends the msg. 
               // other browsers listening to the server will
               // recieve the emitted message. therefore we will
               // need to manually print this msg for the sender.
               $("p#data_recieved").append("<br />\r\n" + name + ': ' + $("input#msg").val());

               // then we empty the text on the input box.
               $("input#msg").val('');
            });

            // ask for the name of the user, ask again if no name.
            while (name == '') {
               name = prompt("What's your name?","");
            }

            // send the name to the server, and the server's 
            // register wait will recieve this.
            socket.emit('register', name );
         });

         // listen for chat event and recieve data
         socket.on('chat', function (data) {

            // print data (jquery thing)
            $("p#data_recieved").append("<br />\r\n" + data.msgr + ': ' + data.msg);

            // we log this event for fun :D
            $("p#log").html('got message: ' + data.msg);

         });
      </script>
   </head>
   <body>
      <input type="text" id="msg"></input><button>Click me</button>
      <p id="log"></p>
      <p id="data_recieved"></p>
   </body>
</html>

虽然它工作得很好,但每次我从客户端向服务器传递一些东西时,我都会得到: "throw er; // 未处理的 'error' 事件。

ReferenceError: 错误未定义。

你需要监听错误事件,比如

socket.on('error', function () {});

https://github.com/Automattic/socket.io/wiki/exposed-events

您正在调用 console.log('error ', err),但 "err" 未在任何地方定义。