Javascript 为什么不是';我的报告中的案例陈述不起作用吗?
如果客户端发送JSON,我的TCP套接字数据处理程序在try块中工作正常。然而,我还希望通过telnet支持一些基本的“终端命令”,因此如果解析器失败,catch块应该尝试识别一个受支持的命令,但我总是得到默认响应SyntaxErrorJavascript 为什么不是';我的报告中的案例陈述不起作用吗?,javascript,node.js,switch-statement,Javascript,Node.js,Switch Statement,如果客户端发送JSON,我的TCP套接字数据处理程序在try块中工作正常。然而,我还希望通过telnet支持一些基本的“终端命令”,因此如果解析器失败,catch块应该尝试识别一个受支持的命令,但我总是得到默认响应SyntaxError socket.on('data', function(data){ try{ var json = JSON.parse(data); switch(json.event){
socket.on('data', function(data){
try{
var json = JSON.parse(data);
switch(json.event){
default:
console.log('unhandled event:'+json.event);
break;
}
}catch(err){
console.log("CLIENT SAID: "+data);
switch(data){
case "echo":
socket.write("ECHO:"+data+"\n");
break;
case "clients":
socket.write("CLIENTS:"+clients.length+"\n");
break;
default:
socket.write('ERROR:'+err+"\n");
break;
}
}
});
你没有接受完整的回答。您应该从流中收集数据,并等待
结束
事件,直到完全接收到数据
var body = '';
socket.setEncoding('utf8');
socket.on('data', function(data) {
body += data;
});
socket.on('end', function () {
try {
var json = JSON.parse(body);
switch (json.event) {
default: console.log('unhandled event:' + json.event);
break;
}
} catch (err) {
console.log("CLIENT SAID: " + body);
switch (data) {
case "echo":
socket.write("ECHO:" + body + "\n");
break;
case "clients":
socket.write("CLIENTS:" + clients.length + "\n");
break;
default:
socket.write('ERROR:' + err + "\n");
break;
}
}
});
不要使用
console.log(“…”+data)
,而是尝试console.log(data)
,看看data
是否实际上是一个字符串。你说得到“语法错误”响应是什么意思?你从哪里得到的?它来自哪里?@Passerby-有趣的是,它记录了@Pointy客户端在发送“clients”@E-Madd时收到一条类似“ERROR:SyntaxError:Unexpected token c”的消息,因此它不是字符串,因此您的所有字符串大小写都将失败,并始终返回到默认值。这可能是一个。好的。这是有道理的,但现在我通过telnet发送的任何东西都不会触发“结束”事件。主体一直在增长。啊,由于套接字保持打开状态,所以必须发送一个分隔符并标记JSON主体的结束位置。您可以在每次触发数据事件时检查分隔符。