我有一个json文件,它由服务器上的应用程序每30秒更新一次。我已经为nodejs写了一个小服务器脚本,通过websocket(socket.io)提供这个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 :(得分:0)
我的猜测是,当你的nodejs脚本正在检查文件时,由另一个应用程序写入文件时会出现错误,因此解析JSON时它没有完全写入。
错误unexpected end of JSON input
表示JSON格式不正确。