我在后端使用 Redis 来扩展订阅。我正在使用 this在我的 javascript 代码之上实现 redis 的库。并为模型使用 Mongoose 。
在 redis 发布期间,我必须对从 mongoose 获得的对象进行字符串化。我在订阅端解析它们并且一切正常,直到对象中有一个嵌套对象需要被字符串化。
所以如果我的对象是这样的:
{ subtitle: '',
description: '',
checklists:
[ { _id: 5cee450c0fa29d0b54275da0, items: [] },
{ _id: 5cee455c0c31785b0875e09d, items: [] },
{ _id: 5cee47dc6d32e72c6411ce2d, items: [] } ],
attachments: [],
labels: [],
_id: 5ced1af26547233798f943f6,
title: 'asfasf',
box: 5cece1c3e6c3c13ff098658d,
workflow: 5cece1cbe6c3c13ff0986591,
}
我收到:
{ cardUpdated:
{
subtitle: '',
description: '',
checklists: [ [Object], [Object], [Object] ],
attachments: [],
labels: [],
_id: '5ced1af26547233798f943f6',
title: 'asfasf',
box: '5cece1c3e6c3c13ff098658d',
workflow: '5cece1cbe6c3c13ff0986591',
}
}
当我发布时,我使用以下行:
pub.publish(types.CARD_UPDATED,
JSON.stringify(
{ cardUpdated: await getUpdatedCardStats(checklist.card) },
));
注意:我知道我在 {}
中包装了 stringify 的参数,如果没有它,嵌套对象将不会被忽略,但我需要这样做,因为我需要关键属性名称订阅结束,即我在多个地方使用具有不同 key 名称的发布命令。
有没有办法让嵌套对象字符串化?
编辑:事实证明,我在 Redis 的订阅端获得了正确的完整对象作为字符串,但实际上是 JSON.parse()
才是罪魁祸首。解析后,它完全忽略了嵌套对象。有什么办法可以避免这种情况吗?
最佳答案
尝试:
const value = JSON.stringify({
cardUpdated: await getUpdatedCardStats(checklist.card)
});
pub.publish(types.CARD_UPDATED, value);
关于javascript - JSON Stringify 忽略 Redis 发布上的嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56357072/