Node.JS Buffer后面有一个换行符

时间:2012-07-28 15:31:11

标签: node.js

如何从此代码中删除换行符?

socket.on('data', function(data){
    console.log('Data in server, sending to handle()');
    worker.handle(data, socket);
});

Worker.handle():

exports.handle = function handle(command, socket) {
console.log('Data sent to handle()');
command = command.toString();

的console.log(命令);

编辑:

我收到了这个输出:

test data
[newline]

编辑2:

以下是继续代码:

if (command === 'look') {
    //stuff
}
if (command === 'login') {
    //stuff

2 个答案:

答案 0 :(得分:2)

这不是显示/呈现问题。这是与数据传输协议有关的问题。 Socket是一种面向流的协议,这意味着它不是基于消息的。同时你正在使用它,就像它是基于消息的 - 你可以做,但是你需要为你的发送者和接收者定义一个协议来识别每条消息的开始和结束。

说完这个并根据您的要求我假设您已经决定使用换行符(或其中一些变体)作为您的留言结束标记。为了使其正常工作,您需要主动在传入数据中查找换行符,以便在处理之前识别每条消息的结束并将其删除。

以下代码应替换您的socket.on方法以获得所需的结果。

// define your terminator for easy reference, changes
var msgTerminator = '\n';
// create a place to accumulate your messages even if they come in pieces
var buf;

socket.on('data', function(data){
    // add new data to your buffer
    buf += data;

    // see if there is one or more complete messages
    if (buf.indexOf(msgTerminator) >= 0) {
        // slice up the buffer into messages
        var msgs = buf.split(msgTerminator);

        for (var i = 0; i < msgs.length - 2; ++i) {
            // walk through each message in order
            var msg = msgs[i];

            // pick off the current message
            console.log('Data in server, sending to handle()');
            // send only the current message to your handler
            worker.handle(msg, socket);
        }

        buf = msgs[msgs.length - 1];  // put back any partial message into your buffer
    }
});

答案 1 :(得分:0)

您可以使用util.print([...]),但请注意,这是同步功能,在输出到stdout时会阻止。

  

<强> util.print([...])

     

同步输出功能。将阻塞进程,将每个参数转换为字符串,然后输出到stdout。不要在每个参数后面添加换行符。

修改

或者,您可以使用process.stdout.write()http://nodejs.org/api/process.html#process_process_stdout