Sails.js res.json 使用 nested-pop 时不返回深度属性
Sails.js res.json not returning deep properties when using nested-pop
我有这段代码可以通过使用 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);
})
在服务器控制台中记录扫描并打印 values 数组。但是 res.json returns 扫描的股票都缺少 values 数组。
预期输出:
[{
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
它也不会出现在浏览器中。
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);
})
现在一切都记录在服务器端并传递给浏览器。
我有这段代码可以通过使用 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);
})
在服务器控制台中记录扫描并打印 values 数组。但是 res.json returns 扫描的股票都缺少 values 数组。
预期输出:
[{
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
它也不会出现在浏览器中。
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);
})
现在一切都记录在服务器端并传递给浏览器。