【问题标题】:JSON file input error on fs module of nodejs websocket scriptnodejs websocket脚本的fs模块上的JSON文件输入错误
【发布时间】:2016-11-05 02:04:22
【问题描述】:

我有一个 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 个错误,以及是否可以以任何方式增强脚本(因为这是我的第一个此类脚本)。

【问题讨论】:

    标签: json node.js socket.io fs pm2


    【解决方案1】:

    我的猜测是,当您的 nodejs 脚本正在检查文件时,其他应用程序正在写入文件,因此在未完全写入时解析 JSON。

    错误unexpected end of JSON input表示JSON格式错误。

    【讨论】:

      猜你喜欢
      • 2015-07-02
      • 2018-11-30
      • 2021-04-04
      • 1970-01-01
      • 2016-12-15
      • 1970-01-01
      • 2019-02-13
      • 2021-05-04
      • 1970-01-01
      相关资源
      最近更新 更多