2017-06-13 63 views
0

我想創建一個瑣事遊戲,其中2個用戶回答問題,然後在最後宣佈獲勝者。我正在使用socket.io接收答案。爲什麼這個socket.io服務器不響應我的客戶端程序?

我的問題是我的server.js無法正常工作。看起來按下按鈕時功能allUsershaveAnswered沒有響應。我也收到一個錯誤Failed to load resource: the server responded with a status of 404 (Not Found)。我在尋找尋找困難問題的所在

$(function(){ 
 
    var socket =io(); 
 

 
    $('#userIdForm').submit(function() { 
 
    console.log($('#userIdForm').val()); 
 
    socket.emit('new user', $('#userIdInput').val()); 
 
    $(gameDiv).show(); 
 
    $(logInDiv).hide(); 
 
    return false; 
 

 
    }); 
 

 
    // in game div a series of question are displayed 
 
    $('#questionForm').submit(function() { 
 
    socket.emit('answer' , $('#answeredInput').val()); 
 
    $('#guessForm').hide(); 
 
    $('#questionForm').show(); 
 
    return false; 
 
}); 
 
// this is called when all users have answered the question 
 

 
socket.on('allUsersHaveAnswered', function (msg) { 
 
    $('#resultsDiv').append("The answer was:" + msg.answer + "<br>Winner:"+ msg.winner); 
 
    $('#waitingDiv').hide(); 
 
    $('#resultsDiv').show(); 
 
}); 
 
});
* { 
 
    margin: 0; 
 
    padding: 0; 
 
    box-sizing: border-box; 
 
} 
 

 
body { 
 
    font: 13px Helvetica, Arial; 
 
} 
 

 
form { 
 
    background: #000; 
 
    padding: 3px; 
 
    position: fixed; 
 
    bottom: 0; 
 
    width: 100%; 
 
} 
 

 
form input { 
 
    border: 0; 
 
    padding: 10px; 
 
    width: 90%; 
 
    margin-right: .5%; 
 
} 
 

 
form button { 
 
    width: 9%; 
 
    background: rgb(130, 224, 255); 
 
    border: none; 
 
    padding: 10px; 
 
} 
 

 
#messages { 
 
    list-style-type: none; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 

 
#messages li { 
 
    padding: 5px 10px; 
 
} 
 

 
#messages li:nth-child(odd) { 
 
    background: #eee; 
 
}
<!doctype html> 
 
<html> 
 
    <head> 
 
    <title>Socket.IO chat</title> 
 
    <link rel="stylesheet" href="master.css"> 
 
    </head> 
 
    <body> 
 
    <div id="logInDiv"> 
 
     <h1>Create an Username</h1> 
 
     <form id="userIdForm" action=""> 
 
     <input id="userIdInput" autocomplete="off" /><button>Send</button> 
 
     </form> 
 
    </div> 
 
    <div id="gameDiv" hidden> 
 
     <h1 id="info">Answer the General Knowlegde Question</h1> 
 
     <h2 id="info2">Once the other player has answered, you will find out who won!</h2> 
 
     <p>Who won the English Premeier League this year?</p> 
 
     <form id="questionForm" action=""> 
 
     <input id="answeredInput" autocomplete="off" /><button>Send</button> 
 
     </form> 
 
     <div id='waitingDiv' hidden> 
 
     <p>Waiting for answers</p> 
 
     </div> 
 
     <div id='resultsDiv' hidden> 
 
     </div> 
 
    </div> 
 
    <script src="https://code.jquery.com/jquery-1.10.2.min.js"></script> 
 
    <script src="./socket.io/socket.io.js"></script> 
 
    <script src="/main.js"></script> 
 

 
    </body> 
 
</html>

這是在服務器上運行:

// server 
 
var express = require('express'); 
 
var app = express(); 
 
var server = require('http').createServer(app); 
 
var io = require('socket.io')(server); 
 
var port = process.env.PORT || 3000; 
 

 
server.listen(port, function() { 
 
    console.log('Server listening at port %d', port); 
 
}); 
 

 
//Routing 
 
app.use(express.static(__dirname + '/public')); 
 

 
// this is the answer 
 

 
var answer = "chelsea"; 
 

 
var guessedanswers = {}; 
 

 
io.on("connection", function(socket) { 
 
    socket.on('new user', function(id) { 
 
    socket.userId = id; 
 
    }); 
 
    socket.on('guess', function(guess) { 
 
    guesses[socket.userId] = parseInt(guess); 
 
    var numAnswers = Object.keys(guessedanswers).lenght; 
 
    console.log("we've gotten: " + numAnswers + " guesses"); 
 
    if (numAnswers >= 2) { 
 
     var winner = ""; 
 
     for (var userId in guessedanswers) { 
 
     var guess = guesses[userId]; 
 
     if (guess == answer) { 
 
      winner = userId; 
 
     } 
 
     } 
 

 
     io.emit('allUsersHaveAnswered', { 
 
     winner: winner, 
 
     answer: "chelsea" 
 
     }); 
 
    } 
 
    }); 
 
});

可能是什麼原因,怎麼要解決這個問題?

+0

你的404具體說什麼,你可以更詳細嗎?你的客戶端在哪裏發出「猜測」?你是否嘗試過用'socket.broadcast.emit(...)'來代替'io.emit(...)' – urbz

回答

0

您在這裏有一個錯字:

Object.keys(guessedanswers).lenght 
中應該是什麼 .length

Object.keys(guessedanswers).length 

這可能意味着你永遠不會得到numAnswers正確的價值,所以你永遠不會進入

if (numAnswers >= 2)條件和因此從不做io.emit('allUsersHaveAnswers,...)``。


有關錯誤'Failed to load resource: the server responded with a status of 404 (Not Found)',你就必須確切地告訴我們它是無法找到其資源。如果它是main.js,那麼你對該資源的路由處理顯然是不正確的。

+0

@KobinaTettehDadzie - 這是否回答你的問題? – jfriend00

相關問題