2016-07-03 6 views
0

서버의 응용 프로그램에서 30 초마다 업데이트되는 json 파일이 있습니다. 아래에 주어진대로 webjocket (socket.io)을 통해이 json 파일을 제공하기 위해 nodejs 용 작은 서버 스크립트를 작성했습니다.nodejs websocket 스크립트의 fs 모듈에 JSON 파일 입력 오류가 발생했습니다.

var app = require('http').createServer(); 
var io = require('socket.io')(app); 
var fs = require('fs'); 

app.listen(8081, '127.0.0.1'); 

io.on('connection', function(socket) { 
    fs.readFile('/tmp/live-info', 'utf8', function (err, data) { 
    if (err) throw err; 
    firstDataObj = JSON.parse(data); 
    socket.emit('alert', firstDataObj); 
    }); 
}); 

var prObj; 

setInterval(function(){  
    fs.readFile('/tmp/live-info', 'utf8', function (err, data) { 
    if (err) throw err; 
    data = JSON.parse(data); 
    scTime = data.schedulerTime; 
    delete data.schedulerTime; 
    if (JSON.stringify(prObj) !== JSON.stringify(data)) { 
     prObj = data; 
     console.log(prObj.current.name, io.engine.clientsCount); 
     prObj.schedulerTime = scTime; 
     io.emit('alert', prObj); 
     delete prObj.schedulerTime; 
    } else { 
    console.log("No change", prObj.current.name, "Total connections: ", io.engine.clientsCount); 
    } 
    }); 
}, 21100); 

당신이 볼 수 있듯이, 스크립트는 주기적으로 JSON 파일의 변경 사항을 확인하고 (타임 스탬프 제외) 내용의 변화가 발견 될 경우 구문 분석 된 객체를 방출합니다.

pm2를 사용하여 서버에서 nodejs 프로세스를 관리하고 있습니다. 모든 것이 잘 작동하지만 반복뿐만 아니라 클라이언트에서 발견 눈에 띄는 틈이 없습니다

SyntaxError: Unexpected end of JSON input 
    at Object.parse (native) 
    at /var/www/scheduleio/server.js:15:25 
    at tryToString (fs.js:449:3) 
    at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:436:12) 

로그에 다음과 오류를 얻고있다. 그러나, 나는이 로그를 매일 200 개가 넘고, 스크립트가 어떤 식 으로든 향상 될 수 있다면 (이 스크립트가 내 첫 번째 스크립트이므로)이 오류를 수정하는 방법을 알고 싶습니다.

답변

0

nodejs 스크립트가 파일을 검사하는 동안 다른 응용 프로그램에서 파일을 쓰는 중 오류가 발생하여 완전히 작성되지 않은 상태에서 JSON을 구문 분석합니다.

오류 unexpected end of JSON input은 JSON 형식이 잘못되었음을 의미합니다.