2016-10-08 2 views
0

"btnok"의 라디오 buttom 수를 계산하고 싶습니다. 도와 주시면 기쁩니다.socket io/"OK"라디오 버튼 수를 계산하십시오.

enter code here<div class="sample clearfix"> 
    <input type="radio" name="s2" id="off" value="0" checked="checked"> 
    <label for="off" class="switch-off" id="btnng">う〜ん。。</label> 
    <input type="radio" name="s2" id="on" value="1"> 
    <label for="on" class="switch-on" id="btnok">なるほど!</label> 
</div> 

server.js는 다음과 같습니다.

얼마나 많은 사용자가 로그인했는지 수를 계산할 수 있지만 시간에 라디오 버튼 상태를 실시간으로 계산할 수 없습니다.

나를 도와 주시면 기쁩니다.


var http = require('http'); 
var path = require('path'); 

var socketio = require('socket.io'); 
var express = require('express'); 

var router = express(); 
var server = http.createServer(router); 
var io = socketio.listen(server); 

router.use(express.static(path.resolve(__dirname, 'public'))); 

var clients = []; 

io.on('connection', function (socket) { 
    console.log("ID: "+socket.id.substring(2)+"has connected"); 
    clients[socket.id] = { 
    vote:'' 
    }; 

    io.sockets.emit('count', socket.client.conn.server.clientsCount); 

    socket.on('vote', function(data){ 
    clients[socket.id].vote = data; // good or bad 
    var result = calcVote(clients); 
    io.sockets.emit('vote', result); 
    }); 

    socket.on('disconnect', function() { 
    delete clients[socket.id]; 
    io.sockets.emit('count', socket.client.conn.server.clientsCount); 
    }); 
}); 
var calcVote = function(calcclients){ 
    var sums = { 
    good:0, 
    bad:0 
    }; 
    calcclients.forEach(function(client){ 
    switch (client.vote) { 
     case 'good' : 
     sums.good += 1; 
     break; 
     case 'bad' : 
     sums.bad += 1; 
     break; 
    } 
    }); 
    return sums; 
}; 

server.listen(process.env.PORT || 3010, process.env.IP || "0.0.0.0", function(){ 
    var addr = server.address(); 
    console.log("Chat server listening at", addr.address + ":" + addr.port); 
}); 
node.js socket.io 

답변

0

당신은 배열로 clients 변수를 선언되지만, 배열로 사용하고 있지 않습니다. 대신 배열 요소가 아닌 clients 변수에 속성을 할당하는 것입니다. 따라서 .forEach()을 사용하여 연결된 사용자를 반복하려고하면 .forEach()은 배열 요소 만 반복하지만 배열 요소가 아니라 배열에 속성을 할당하기 때문에 원하는 작업을 수행 할 수 없습니다. 따라서 .forEach()은 아무 것도 반복하지 않습니다.

변경에 :

var clients = {}; 

그리고, 다음 속성을 같은 for/in 또는 for/of을 반복 처리하는 반복 방법을 사용하거나 Object.keys()와 배열에 속성 이름을 얻고 사람들을 반복. 예를 들어

:

var calcVote = function(calcclients){ 
    var sums = { 
    good:0, 
    bad:0 
    }; 
    Object.keys(calcclients).forEach(function(id){ 
    var client = calcclients[id]; 
    switch (client.vote) { 
     case 'good' : 
     sums.good += 1; 
     break; 
     case 'bad' : 
     sums.bad += 1; 
     break; 
    } 
    }); 
    return sums; 
};