【问题标题】:Error sending JSON over webscket通过 websocket 发送 JSON 时出错
【发布时间】:2015-03-15 19:24:45
【问题描述】:

我在 javascript 和节点中有这个小型聊天应用程序,我试图通过 websocket 发送一个简单的 JSON 对象,但它显示与我在服务器端执行的“JSON.parse”相关的错误。我试图更改代码,但似乎没有任何效果。为什么会这样? 我的操作系统是 windows 8.1,我使用的是 firefox 和 chrome。

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.');
    })
})

【问题讨论】:

  • http请求返回的原始值是多少?
  • 所以错误显示为u,但您的代码没有任何名为u 的变量,您能否通过查明实际上出错的地方来帮助我们,以及您尝试读取的 JSON 是什么,它是否可以通过网络解析(404,403 等),如果它解析,这是否是有效的 json?你不能只使用 JSON.parse,你总是需要将它包装在 try/catch 中,因为它会抛出错误的输入。添加try/catch,看看代码是否抛出,如果是,错误和输入是什么。

标签: javascript json node.js websocket


【解决方案1】:

首先,出现该错误是因为 message.data 的值 undefined 不是有效的 JSON 值。

因此,问题是“为什么 message.data 未定义?”,如果我没记错的话,那是因为通过 Socket.io 发送的数据在 message 而不是 message.data

TL;DRvar k = JSON.parse(message.data); 替换为 var k = JSON.parse(message);

PS:使用 Socket.io,您无需手动进行 JSON 字符串化/解析对象,因为 API 会为您完成。你可以只传递对象

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2018-05-14
    • 1970-01-01
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多