2016-11-04 18 views
0

私は「ユーザー名」と呼ばれるイベントをトリガーしようとしています。 Node.jsでSocket.IOライブラリを使用しています。ソケットで発光させると、なぜイベントトリガーが発生しないのですか?

index.htmlをクライアント側の私が発光するようにしようとしているイベントです:

//show online users 
    socket.on('usernames', function (data) { 
     console.log('@@@@@@@@@@@@@@@@@@@@@'); 
     var html = ''; 
     for (var i = 0; i < data.length() ; i++) { 
      html += data[i] + '<br/>'; 
     } 

     $users.html(html); 
    }); 

EMITがオンになっているので、私は2つのindex.htmlファイル、およびserver.jsを持っていますserver.jsにおけるサーバ側:

io.sockets.on('connection', function (socket) { 
    //new user join 
    socket.on('new user', function (data, callback) { 
     if (nicknames.indexOf(data) != -1) { //if name dont exist .indexOf() returns -1 
      callback(false); 
     } else { 
      callback(true); 
      socket.nickname = data; 
      nicknames.push(socket.nickname); 
      io.sockets.emit('usernames', nicknames); 
     } 
    }); 
    // sent message from user 
    socket.on('send message', function (data) { 
     //send the data to all users 
     io.sockets.emit('new message', data); 
    }); 
    // 
}); 

** index.htmlの中のイベントは$(ドキュメント).ready()内にあります。

何も起こらず、イベントが発生しません。

ヘルプ?

+0

イベント名にはスペースを使用しないでください。イベント「新規ユーザー」はこれまでに呼び出されましたか?そうでない場合は、 "usernames"を放出しません – Molda

+0

実際には、それはベストプラクティスではないかもしれないが、おそらくスペースでうまく動作します。 –

+0

「usernames」という名前の発光が発生したときにトリガーするイベントがあります。私はあなたのサーバー側のコードでは、 '新しいユーザー'と呼ばれるイベントの中で 'usernames'というイベントを放出していることがわかります。新しいユーザーは別の場所で呼び出されていますか?もしそうでなければ、それは始めるのに良い場所になるでしょう。また、あなたのサーバーではニックネーム配列に各ユーザー名をプッシュしていますが、ニックネーム配列はこのコードスニペットには表示されません。ただし、この例の一部としては含まれていない場合を除きます。 – Jackthomson

答えて

0

私自身の質問に答える。 2つのエラーがありました: 1) 'data.length()'というステートメントはコンパイルされませんでした。正しい方法は 'data.length'です。 2) 'new user'イベントを発生させなかったので、 'usernames'イベントはトリガーしませんでした。

関連する問題