通过 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;DR 将 var k = JSON.parse(message.data);
替换为 var k = JSON.parse(message);
PS:使用 Socket.io,您无需手动进行 JSON 字符串化/解析对象,因为 API 会为您完成。你可以只传递对象
【讨论】:
以上是关于通过 websocket 发送 JSON 时出错的主要内容,如果未能解决你的问题,请参考以下文章