为什么node.js将传入的数据分成块?

时间:2012-06-28 01:35:45

标签: events node.js loops

node.js中的以下代码不会记录括号内的所有传入数据,而是将数据分成块。因此,例如,如果输入数据是ABCDEF ... XYZ,则将数据记录为[ABC] [DEF] ... [XYZ]而不是[ABCDEF ... XYZ]。当然,数据要大得多,字母表只是一个例子。

我该如何写这个,以便所有传入的数据都记录在括号内而不是部分?

chatServer.on('connection', function(client) 
{
    client.on('data', function(data) 
    {
        console.log('[' + data.toString() + ']');
    })    
})

2 个答案:

答案 0 :(得分:8)

您的数据是否以数据包形式到达,因此(在这种情况下)您应该将数据包连接到您在函数外部定义的变量。

buffer = '';

chatServer.on('connection', function(client) 
{
    client.on('data', function(data) 
    {
        buffer += data.toString();
    })    
});

console.log('[' + buffer + ']');

答案 1 :(得分:4)

就像matthewdavidson所说的那样,您正在订阅发送的每个“数据块”而不是整个消息。您更有可能想要在函数内的闭包中捕获数据并仍然异步响应。请尝试以下方法:

chatServer.on('connection', function(client) 
{
    var buffer = '';

    client.on('data', function(data) 
    {
        buffer += data;
    })

    client.on('end', function(){
        console.log('[' + buffer + ']');
    })
});

结帐http://www.nodebeginner.org/#handling-post-requests了解更多信息