Я пытаюсь использовать 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"}
Я мог бы проанализировать вывод с помощью регулярных выражений, но тогда не всегда данные поступают в этом формате.