Javascript 为什么不是';我的报告中的案例陈述不起作用吗?

Javascript 为什么不是';我的报告中的案例陈述不起作用吗?,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){

如果客户端发送JSON,我的TCP套接字数据处理程序在try块中工作正常。然而,我还希望通过telnet支持一些基本的“终端命令”,因此如果解析器失败,catch块应该尝试识别一个受支持的命令,但我总是得到默认响应SyntaxError

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主体的结束位置。您可以在每次触发数据事件时检查分隔符。