通过 websocket 发送 JSON 时出错

Posted

技术标签:

【中文标题】通过 websocket 发送 JSON 时出错【英文标题】:Error sending JSON over webscket 【发布时间】: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,看看代码是否抛出,如果是,错误和输入是什么。 【参考方案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 会为您完成。你可以只传递对象

【讨论】:

以上是关于通过 websocket 发送 JSON 时出错的主要内容,如果未能解决你的问题,请参考以下文章

C++ 中的 Websocket 服务器发送消息时出错

使用ws通过websocket发送对象:无法反序列化

通过 Socket TCP/IP 发送数据时出错

使用ws通过websocket发送对象:无法反序列化

通过 websockets 以 JSON 格式发送事件

json解析时出错