簡體   English   中英

ZCCADCDEDB567ABAE643E15DCF0974E503Z:發送到客戶端后無法設置標頭

[英]Mongoose : Cannot set headers after they are sent to the client

我正在對我的數據庫執行 put 請求,到目前為止一切都按預期工作,但我在控制台中有一條煩人的消息,我相信這會阻礙我的進展。

Cannot set headers after they are sent to the client
[0] (node:13816) UnhandledPromiseRejectionWarning: Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

我嘗試在if上添加else語句,它似乎並沒有解決問題? 有任何想法嗎?

我的代碼片段:

// PUT api/requests/upvote/:id
// Upvote or downvote a post
// Private
router.put('/response/upvote/:id/:response_id', auth, async (req, res) => {
  try {
    const request = await Requests.findById(req.params.id);
    //Pull out response

    const array = request.responses.filter((item) => item.id.toString());
    const result = array.find(
      (response) => response.id === req.params.response_id
    );

    if (req.body.vote_type === 'upvote') {
      if (
        result.upvotes.filter(
          (upvote) =>
            upvote.user.toString() === req.user.id &&
            upvote.vote_type === 'downvote'
        ).length > 0
      ) {
        const removeIndex = result.upvotes
          .map(
            (upvote) =>
              upvote.user.toString() === req.user.id &&
              upvote.vote_type === 'downvote'
          )
          .indexOf(req.user.id);

        result.upvotes.splice(removeIndex, 1);

        result.upvotes.push({
          user: req.user.id,
          vote_type: req.body.vote_type,
        });
        await request.save();
        res.json(result.upvotes);
      }

      if (
        result.upvotes.filter(
          (upvote) =>
            upvote.user.toString() === req.user.id &&
            upvote.vote_type === 'upvote'
        ).length > 0
      ) {
        res.status(400).send('You already upvoted this suggestion');
      } else {
        result.upvotes.push({
          user: req.user.id,
          vote_type: req.body.vote_type,
        });
        await request.save();
        res.json(result.upvotes);
      }
    }

    if (req.body.vote_type === 'downvote') {
      if (
        result.upvotes.filter(
          (upvote) =>
            upvote.user.toString() === req.user.id &&
            upvote.vote_type === 'upvote'
        ).length > 0
      ) {
        const removeIndex = result.upvotes
          .map(
            (upvote) =>
              upvote.user.toString() === req.user.id &&
              upvote.vote_type === 'upvote'
          )
          .indexOf(req.user.id);

        result.upvotes.splice(removeIndex, 1);

        result.upvotes.push({
          user: req.user.id,
          vote_type: req.body.vote_type,
        });
        await request.save();
        res.json(result.upvotes);
      }

      if (
        result.upvotes.filter(
          (upvote) =>
            upvote.user.toString() === req.user.id &&
            upvote.vote_type === 'downvote'
        ).length > 0
      ) {
        res.status(400).send('You already downvoted this suggestion');
      } else {
        result.upvotes.push({
          user: req.user.id,
          vote_type: req.body.vote_type,
        });
        await request.save();
        res.json(result.upvotes);
      }
    }
  } catch (error) {
    console.error(error.message);
    res.status(500).send('Server Error');
  }
});

這不是 Mongoose 錯誤。

在您的代碼的幾個地方,您正在返回一個帶有res.json的響應,但是您沒有使用return ,因此即使發送了響應,您的腳本也會繼續執行,並且它會在下一個時嘗試再次發送它res.json

只需在每個res.json語句之前添加return即可。

return res.json(result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM