如何解决将标头发送到客户端后无法设置标头的问题?

时间:2019-04-15 03:07:15

标签: mysql node.js express server promise

在阅读了最近2.5个小时的主题后,我无法确定如何解决:将标头发送给客户端后无法设置标头,但我认为这与底部的以下代码有关,尤其是代码以粗体显示。

任何帮助或帮助将不胜感激。

FOR i = 1 TO 5
    PRINT "Enter Investor-" + STR$(i) + "'s Principal";: INPUT p(i)
    PRINT "Enter Investor-" + STR$(i) + "'s Time";: INPUT t(i)
NEXT
PRINT "Amounts:"
PRINT "Accrued", "Principal", "Time"
PRINT "-------", "---------", "----"
r = .12
FOR i = 1 TO 5
    rt(i) = 1 + (r * t(i))
    a(i) = (p(i) * rt(i))
    PRINT a(i), p(i), t(i)
NEXT
END

2 个答案:

答案 0 :(得分:0)

您的代码存在的问题是您要在迭代循环中调用res.json()。

以来,您只能拨打一次电话
  

res.json()在后台实现了res.write(),res.setHeaders()和res.end(),   这意味着一旦调用res.end(),它将终止请求,并且无法再发送了。

最好使用

res.setHeader('Content-Type', 'application/json'); // before all the iterations
res.send(JSON.stringify({key:"value"})); // replace this for your res.json()
res.end() // after iterations

答案 1 :(得分:0)

正如@kiran Mathew回答的那样,在for循环内一次又一次调用res.json(),这就是为什么发生“发送响应后无法设置标头”的原因。

您可以使用结果数组' trackingNumbers '存储所有tracking_number,然后退出循环并发送单个响应。

app.post("/api/tracking/retrieve", (req, res) => {
const trackingCodes = ["EZ6000000006", "EZ4000000004"];
  const carrierCodes = ["UPS", "UPS"];
  const trackingNumbers = [];

  trackingCodes.forEach(trackingCode => {
    carrierCodes.forEach(carrierCode => {
      const tracker = new api.Tracker({
        tracking_code: trackingCode,
        carrier: carrierCode
      });

      tracker
        .save()
        .then(function(data) {
          table = "tracking_table";
          col = ["user_id", "tracking_number"];
          val = [user_id, tracker.tracking_code];

          // !ISSUE: :: ::: :::: ::::: :::::: ::::::: //**

          main.create(table, col, val, function(data) {
            // res.json({
            //   id: "",
            //   user_id: user_id,
            //   tracking_number: data.tracking_code
            // });

            trackingNumbers.push(data.tracking_code);
          });
        })
        .catch(error => {
          // handle errors
          console.log("There has been an error with your submission.");
        });

      res.json({
        id: "",
        user_id: user_id,
        tracking_number: trackingNumbers
      });
    });
  });
});