簡體   English   中英

express-錯誤:發送標頭后無法設置標頭

[英]express - Error: Can't set headers after they are sent

您好,我嘗試了所有操作,但是以下非常簡單的代碼為我提供了“發送后無法設置標題”錯誤,對於您輸入的幾天我一直在努力

  app.post('/login', function (req, res) {
      var emailpassed = req.body.email

      var shaObj = new jsSHA('SHA-256', 'TEXT')
      shaObj.update('zzzz' + req.body.password)
      var hash = shaObj.getHash('HEX')

      var params = {
        TableName: 'passengers',
        IndexName: 'emailpass',
        ProjectionExpression: 'password',
        KeyConditionExpression: '#yr = :yyyy',
        ExpressionAttributeNames: {
          '#yr': 'email'
        },
        ExpressionAttributeValues: {
          ':yyyy': emailpassed
        }
      }

      docClient.query(params, function (err, data) {
        if (err) {
          console.log('No such user found.1')

        } else {
          data.Items.forEach(function (item) {
            if (item.password != hash) {
              console.log('Incorrect password.1')
            } else {

              var payload = {id: item.pid, password: hash}
              var token = jwt.sign(payload, 'sa')

              if (token) {
                return res.json({token: token})

              }
            }

          })
          console.log('daaakey')

        }
      })
  return;
  }
  )

您正在.forEach()循環內調用res.json() ,這意味着您可以在data.Items.length大於1且滿足某些其他條件時data.Items.length調用它。 請記住,當您確實return res.json() ,該return是從.forEach()回調返回的,因此.forEach()循環繼續運行,並且再次調用了該回調。 您看到的錯誤是由於嘗試向給定請求發送多個響應而導致的,這是不允許的。

您需要重組代碼流,以使您的.forEach()循環收集輸入(通常在數組中),然后在循環完成后發送一個包含所有數據的響應,或者僅打算在循環上發送響應。找到第一個令牌,然后您可能要切換到常規for循環,以便在發送帶有returnbreak的響應(避免發送另一個)后可以退出循環。 從您的代碼中尚不清楚您可能打算使用哪種方案(僅發送第一個數據或累積所有數據並全部發送)。

暫無
暫無

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

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