读取Node.js中Changestream API发送的数据

时间:2019-07-04 07:20:05

标签: loopbackjs changestream

我试图利用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”:“创建”}

我想用以下方法将on事件的预期输出作为JSON对象:

  

{“数据”:{“ x”:1500,“ y”:true,“ id”:“ 5d1d90989ba59229ac01c883”}}

我正在以字符串格式获取它:

  

data:{“ target”:“ 5d1d90989ba59229ac01c883”,“ data”:{“ x”:1500,“ y”:true,“ id”:“ 5d1d90989ba59229ac01c883”},“ type”:“创建”}

我本可以使用正则表达式解析输出,但并非总是以这种格式输入数据。

0 个答案:

没有答案