我试图利用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”:“创建”} >
我本可以使用正则表达式解析输出,但并非总是以这种格式输入数据。