2015-03-15 3 views
0

У меня есть это приложение для малого чата в javascript и узле, и я пытаюсь отправить простой объект JSON поверх websocket, но он отображает ошибку, связанную с «JSON.parse», которую я делаю в сервер. Я попытался изменить код, но ничего не работает. Почему это может быть? моей операционной системой является Windows 8.1, и я использую firefox и chrome.Ошибка отправки JSON через веб-сайт

undefined:1 
undefined 
^ 
SyntaxError: Unexpected token u 
    at Object.parse (native) 
    at WebSocketConnection.<anonymous> (C:\Users\*****\Documents\simple 
_chat\server.js:39:22) 

здесь код на стороне клиента

var socket = new WebSocket('ws://127.0.0.1:1234'); 

    function sendMessage(){ 
     var message = document.getElementById('message').value; 
     var message_send ={ 
      name_:"WHATEVER", 
      message_:message 
     } 
     socket.send(JSON.stringify(message_send)); 
    } 

    socket.addEventListener("message", function(e){ 
     var msg = e.data; 
     console.log(e); 
     document.getElementById('chatlog').innerHTML+='<br>'+msg; 
    }) 

здесь код сервера:

var count = 0; 
var client ={}; 

var websocket = require('websocket').server; 
wsServer = new websocket({httpServer:server}); 

wsServer.on('request',function(r){ 
    var connection = r.accept(null, r.origin); 
    var id = count++; 
    client[id]=connection 
    console.log((new Date()) + ' Connection accepted [' + id + ']'); 

    connection.on('message', function (message) { 
     var k = JSON.parse(message.data); 
     var message_ = k.content_ 
     var name_ = k.name_; 
     console.log(name_ +" "+message_); 
     for(var i in client){ 
      client[i].sendUTF(name_+": "+message_); 
     } 
    }); 

    connection.on('close', function (reasonCode, description) { 
     delete client[id]; 
     console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); 
    }) 
}) 
+0

Какое исходное значение возвращается из запроса http? –

+0

, поэтому ошибка говорит 'u', но ваш код не имеет каких-либо переменных, называемых' u', вы можете помочь нам, указав, где вещи на самом деле ошибочны, и что JSON - это то, что вы пытаетесь прочитать в том, может ли он быть разрешен в сети (404, 403 и т. д.), и если он решает, действительно ли это json? Вы не можете просто использовать JSON.parse, вам всегда нужно обернуть его в try/catch, потому что он будет использовать плохой ввод. Добавьте try/catch и посмотрите, генерирует ли код, и если да, то что такое ошибка и ввод. –

ответ

0

Прежде всего, кажется, что ошибка, потому что message.data имеет значение undefined, что недействительным значением JSON.

Вопрос, таким образом, «почему message.data неопределенными?», И если я правильно помню, это потому, что данные, передаваемые через Socket.io в message и не message.data.

TL; DR Заменить var k = JSON.parse(message.data); с var k = JSON.parse(message);

PS: с Socket.io вам не нужно вручную JSON stringify/разбора объектов, так как API делает это для вас. Вы можете просто передать объект

Смежные вопросы