【问题标题】:How to send an array with Express res.send()如何使用 Express res.send() 发送数组
【发布时间】:2020-05-13 23:18:12
【问题描述】:

我创建了这个 api 来发回一个我填充了数据的数组:

router.get('/getDevice/:instanceId', (req, res) => {
    let deviceSum = [];
    SingleAxis.findAll({where: {instanceid: req.params.instanceId}})
        .then(singleAxis => {
            if (singleAxis) {
                for (let i = 0; i < singleAxis.length; i++) {
                    SingleAxisSegment.findAll({where: {singleAxisId: singleAxis[i].singleAxisId}})
                        .then(singleAxisSegments => {
                            let sum = 0;
                            for (let i = 0; i < singleAxisSegments.length; i++) {
                                sum += singleAxisSegments[i].counterAmount;
                            }
                            deviceSum.push({label: singleAxis[i].name, value: sum});
                        })
                        .catch(err => {return err});
                }
                console.log(deviceSum);
                res.status(200).send(deviceSum);
            } else {
                res.status(200).json({message: 'Nothing found'});
            }
        })
        .catch(err => res.status(400).json({message: 'Error', err}));
});

console.log(deviceSum) 打印出以下数据:

[
  { label: 'Z5', value: 4404253 },
  { label: 'X9', value: 4423724 },
  { label: 'D6', value: 5506045 }
]

所以数组包含数据,但是当我用休息客户端测试 api 时,我只得到一个空数组。

如何将数组发送回客户端?

【问题讨论】:

  • 如果您发送 string 而不是 array 会怎样。您是否使用“休息客户端”获得它?
  • deviceSum 是通过调用某种承诺来填充的吗?如果是这样,那可能就是原因
  • 你能在这里发布所有的获取电话吗?这肯定是您填充数组的地方的承诺

标签: javascript arrays node.js express


【解决方案1】:

您必须在第二个findAll 方法中发送响应。您在完成第二个 findAll 承诺之前发送响应。

你能试试这个代码吗?

我使用async await 使代码更具可读性。

router.get("/getDevice/:instanceId", async (req, res) => {
  let deviceSum = [];
  try {
    let singleAxis = await SingleAxis.findAll({
      where: { instanceid: req.params.instanceId }
    });
    if (singleAxis) {
      for (let i = 0; i < singleAxis.length; i++) {
        let singleAxisSegments = await SingleAxisSegment.findAll({
          where: { singleAxisId: singleAxis[i].singleAxisId }
        });
        let sum = 0;
        for (let i = 0; i < singleAxisSegments.length; i++) {
          sum += singleAxisSegments[i].counterAmount;
        }
        deviceSum.push({ label: singleAxis[i].name, value: sum });
      }
      console.log(deviceSum);
      res.status(200).send(deviceSum);
    } else {
      res.status(200).json({message: 'Nothing found'});
    }
  } catch (error) {
    res.status(400).json({ message: "Error", err });
  }
});


【讨论】:

    猜你喜欢
    • 2015-01-14
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多