2015-08-31 2 views
3

Я создал тестовый сервер, который отправляет куски сжатого JSON. Когда я подключаюсь к серверу, он отправляет недействительный JSON, и для жизни я не могу понять, почему. Результат добавляет дополнительную двойную кавычку.nodejs: разобрать куски json

Серверный код:

const net = require('net'), 
server = net.createServer(function(connection) { 
    console.log('subscriber connected.'); 

    // send first chunk immediately 
    connection.write('{"type":"changed","file":"targ"'); 

    let timer = setTimeout(function() { 
     connection.write('et.txt","timestamp":1358175758495}' + '\n'); 
     connection.end(); 
    }, 1000); 

    connection.on('end', function() { 
     clearTimeout(timer); 
     console.log('subscriber disconnected'); 
    }); 
}); 

server.listen(5432, function() { 
    console.log('test server listening for subs...') 
}); 

ldj.js

'use strict'; 
const 
    events = require('events'), 
    util = require('util'), 
    // client constructor 
    LDJClient = function(stream) { 
     events.EventEmitter.call(this); 
     let self = this; 
     let buffer = ''; 

     stream.on('data', function(data) { 

      buffer += data; 
      console.log(buffer) 
      let boundary = buffer.indexOf('\n'); 
      while(boundary !== -1) { 
       let input = buffer.substr(0, boundary); 
       buffer = buffer.substr(boundary + 1); 
       //self.emit('message', JSON.parse(input)); 
       boundary = buffer.indexOf('\n'); 
      } 
     }); 
    }; 

util.inherits(LDJClient, events.EventEmitter); 

// expose module methods 
exports.LDJClient = LDJClient; 
exports.connect = function(stream) { 
    return new LDJClient(stream); 
}; 

Выход:

{"type":"changed","file":"targ" 
{"type":"changed","file":"targ"et.txt","timestamp":1358175758495} 

Это дополнительный "не должно быть в "" значение target.txt Любые идеи.?

TIA

+0

Вы можете разместить код сервера? Вам нужно убедиться, что буферизуется в новой строке правильно, чем синтаксический анализ. Тот факт, что 'файл' вообще не цитируется в выводе, указывает на то, что на сервере происходит что-то странное. –

+3

Дополнительная двойная кавычка после 'targ':' '{"type": "changed", "file": "targ"' '? –

+0

ERR. Благодарю. Я забыл повторно запустить сервер узла после внесенных изменений, заставив меня подумать, что это не сработало. : / – cp3

ответ

0

rathern чем расщепление строки Мануалы попытаться получить всю строку и разделить его на куски и затем отправить его:

var data = '{"type":"changed","file":"target.txt","timestamp":1358175758495}'; 
var chunks = data.match(/.{1,10}/g); // 10 symbol chunks 
for(var i = 0; i < chunks.length; i++) { 
    var chunk = chunks[i]; 
    setTimeout(function() { 
    if(connection) { 
     connection.write(chunk+'\n'); 
     if(i + 1 == chunks.length) { 
     connection.end(); 
     } 
    } 
    }, i*1000); 
} 

connection.on('end', function() { 
    console.log('subscriber disconnected'); 
});