使用嵌套弹出

时间:2017-10-14 21:18:11

标签: javascript json sails.js

我有这个代码,通过使用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,因此它也不会出现在浏览器中。

1 个答案:

答案 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);
  })

现在所有内容都记录在服务器端并传递给浏览器。