Чтение данных, отправленных API Changestream в nodejs - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь использовать change-stream API обратной связи для отправки событий, когда изменяется базовая коллекция MongoDB.Я могу отправлять события, но затем у меня возникают проблемы с анализом ответа на стороне клиента, который также является другим файлом node.js.

Я уже пробовал читать данные в клиенте, но не могу получить должным образом отформатированный JSONв качестве вывода

у меня есть этот код, который отправляет события.

  MyModel.createChangeStream(function(err, changes) {
    changes.pipe(es.stringify()).pipe(process.stdout);
  })

У меня есть другой файл js с таким кодом, который должен прослушивать вышеуказанные события.

const request = require('request')
const URL_TO_MONITOR = 'http://localhost:3000/api/v1/MyModels/change-stream?_format=event-stream&access_token=testtoken'
let stream = request.get(URL_TO_MONITOR)

stream.on('error', function (err) {
  console.log({err})
}).on('data', function (chunk) {
  let validObj = null
  try {
    validObj = JSON.parse(chunk)
  } catch (err) {
    console.log(err)
    console.log('Invalid' + err)
  }
  console.log(validObj)
}).pipe(process.stdout)

Моя цель - всякий раз, когда изменения отправляются функцией changeStream, я хочу прочитать ее в формате JSON во втором файле.Не в состоянии разобрать JSON.

Если я печатаю chunk.toString, он возвращает это:

data: {"target": "5d1d90989ba59229ac01c883", "data": {"x": 1500, "y": true, "id": "5d1d90989ba59229ac01c883"}, "type": "create"}

Я хочу видеть ожидаемый вывод события в виде объекта JSON с этим:

{"data": {"x": 1500, "y": true, "id": "5d1d90989ba59229ac01c883"}}

Я получаю его в формате строки:

data: {"target": "5d1d90989ba59229ac01c883", "data": {"x": 1500, "y": true, "id": "5d1d90989ba59229ac01c883"}, "type": "create"}

Я мог бы проанализировать вывод с помощью регулярных выражений, но тогда не всегда данные поступают в этом формате.

...