SyntaxError:意外的输入结束(nodejs tcp server)

时间:2013-08-31 14:07:36

标签: javascript json node.js

我有一个非常基本的tcp服务器,可以发送和接收json数据。

请参阅我的代码:

  // Handle incoming messages from clients.
  socket.on('data', function (data) {

    var obj = JSON.parse(data);

    if(obj.type == "register") {
        _clientObj[obj.msg] = {
            client: 'Client',
            socketID: socket.name
        }


        console.log("Register...");     

    } else if(obj.type == "message") {


        console.log(socket.name + " --> message: " + obj.msg);  
    }

  });

问题似乎是有时数据不完整而且会出错:

  

SyntaxError:意外的输入结束

在解析json之前,我怎样才能在数据完成之前等待?

1 个答案:

答案 0 :(得分:3)

您可以等待发出结束事件,然后解析它。

示例

// Handle incoming messages from clients.
data = '';
socket.on('data', function (chunk) {
    data += chunk;
});

// Handle incoming messages from clients.
socket.on('end', function () {
    var obj = JSON.parse(data);

    if(obj.type == "register") {
        _clientObj[obj.msg] = {
            client: 'Client',
            socketID: socket.name
        }

    console.log("Register...");   

    } else if(obj.type == "message") {
        console.log(socket.name + " --> message: " + obj.msg);  
    }
});

<强>文档http://nodejs.org/api/all.html#all_event_end_1