簡體   English   中英

發送標頭/節點后無法設置標頭

[英]Can't set headers after they are sent Node / Express

我正在嘗試使用jquery從客戶端表單上的數據發布到將數據發送到節點/ express中的api的發布路由。

我收到錯誤消息,在發送標頭后無法設置標頭,我不知道為什么。

我怎樣才能解決這個問題?

客戶:

<input id="prospect-form" type="text" placeholder="Email Address" class="form-control" style="vertical-align: baseline; display:inline-block; background-color: white; border: none;" onClick="submitData()" />

<script charset="utf-8">
    var submitData = function() {
      var data = $("prospect-form").serialize();
      $.post("/prospect/" + data, function() {
        console.log("data sent");
      })
      .done(function() {
        console.log("data success");
      })
      .fail(function() {
        console.log("data failed");
      })
      .always(function() {
        console.log("data finished");
      })
    }
</script>

表達:

router.post('/prospect/:query', function(req, res) {
  var data = req.params.query;
  var options = {
    url: "https://prospect.io/api/public/v1/prospects",
    formData: data,
    headers: {
      "Authorization": "",
      "Content-Type": "application/vnd.api+json; charset=utf-8",
    }
  }

  function callback(error, response, body) {
  if (!error && response.statusCode == 200) {
    var info = JSON.parse(body);
    console.log(info);
    }
  }

  request.post(options, callback) //post

  res.end()

}) //router post

非常感謝!

問題很簡單。

我認為request.post(options,callback)是一個異步函數,對嗎? 當代碼開始執行res.end()時,功能request.post仍作為單獨的線程執行。

這就是為什么您有此多線程問題。 這是node和express的常見異步錯誤。

解決方案是使用promise,async.js或async / await使其成為同步順序。

您應該將res.end()移到回調函數中。

更新的可能是

router.post('/prospect/:query', function(req, res) {
  var data = req.params.query;
  var options = {
    url: "https://prospect.io/api/public/v1/prospects",
    formData: data,
    headers: {
      "Authorization": "",
      "Content-Type": "application/vnd.api+json; charset=utf-8",
    }
  }

  function callback(error, response, body) {
   if (!error && response.statusCode == 200) {
    var info = JSON.parse(body);
    console.log(info);
   }
   res.end()
  }

  request.post(options, callback) //post

}) //router post

暫無
暫無

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

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