如何使用Node.js中的EventEmitter处理JSON解析错误

时间:2019-05-02 15:56:02

标签: javascript json

我正在Node.js中开发一个模块,并使用EventEmitter从发出JSON的应用程序流式传输数据。我想正确处理JSON解析错误。

示例1:使用try / catch块并将SyntaxError传递给消息事件回调

let buffer = '';
stream.on('data', data => {
  buffer += data;
  let boundary = buffer.indexOf('\n');
  while (boundary !== -1){
    const input = buffer.substring(0, boundary);
    buffer = buffer.substring(boundary + 1);
    try {
      const json = JSON.parse(input);
      this.emit('message', json);
    } catch (err) {
      this.emit('message', err, null);
    }
    boundary = buffer.indexOf('\n');
  }
});

示例2:使用try / catch块并发出错误事件,将SyntaxError传递给错误事件回调

let buffer = '';
stream.on('data', data => {
  buffer += data;
  let boundary = buffer.indexOf('\n');
  while (boundary !== -1){
    const input = buffer.substring(0, boundary);
    buffer = buffer.substring(boundary + 1);
    try {
      const json = JSON.parse(input);
      this.emit('message', json);
    } catch (err) {
      this.emit('error', err);
    }
    boundary = buffer.indexOf('\n');
  }
});

是否存在处理这些类型错误的首选约定?

1 个答案:

答案 0 :(得分:0)

这两种解决方案都是可以辩护的,但就Node.js EventEmitter约定而言,我认为解决方案2更好。

如果您参考文档:https://nodejs.org/api/events.html#events_emitter_emit_eventname_args,则所有embed()args只是其他参数,与错误处理无关。

我想您必须实现一个通用的“错误”侦听器并在错误情况之间进行切换,以单独或默认处理它们。