我有这个代码,通过使用nested-pop
来获取具有深层嵌套关联的库存数据Stock.find({limit:100, sort:'name ASC'})
.populate('scans', {limit:1,sort:'createdAt DESC'})
.then((stocks) => {
return nestedPop(stocks, {
scans: ['values']
})
}).then(stocks => {
console.log(stocks[0].scans[0]);
res.json(stocks);
})
在服务器控制台中记录扫描并打印值阵列。但是res.json会返回扫描的库存,这些扫描都缺少值数组。
预期产出:
[{
id: 1,
scans: [
{
id: 1,
values: [
{
id: 1,
value: 0.5,
type: 1
},
...
]
}
]
}, ...]
返回的输出:
[{
id: 1,
scans: [
{
id: 1,
}
]
}, ...]
错误似乎与对象的深度无关,因为我用一些更深的测试对象测试它并且返回了所有内容。我只是不明白如果它在那里,res.json不会返回这个。
更新
我现在进行了其他测试,发现调用单个股票的.toObject
和.toJSON
都会导致值在服务器端消失。由于res.json
在传递的对象上调用.toJSON
,因此它也不会出现在浏览器中。
答案 0 :(得分:0)
nestedPop返回.toJSON
无法正确解析的值,因为它们已经被转换。
我通过在将它们传递给nestedPop之前转换所有股票来解决问题,因此工作代码是:
Stock.find({limit:100, sort:'name ASC'})
.populate('scans', {limit:1,sort:'createdAt DESC'})
.then((stocks) => {
stocks = stocks.map((s) => s.toJSON());
return nestedPop(stocks, {
scans: ['values']
})
}).then(stocks => {
console.log(stocks[0].scans[0]);
res.json(stocks);
})
现在所有内容都记录在服务器端并传递给浏览器。