簡體   English   中英

在我的 ExpressJS 應用程序中使用 axios 進行 POST 給我“發送到客戶端后無法設置標頭”錯誤

[英]Using axios to POST within my ExpressJS app is giving me "Cannot set headers after they are sent to the client" error

我有一個簡單的 Express 應用程序,有幾條路線。 特別是一種路由是 POST 路由。 在此 POST 路由中,我嘗試向第三方 API 發出 POST 請求,並在我的實際 POST 響應中使用來自該第三方 API 響應的數據。 該應用程序如下所示:

const express = require('express');
const axios = require('axios');

const app = express();

...

app.post(
  '/api/links',
  (req, res, next)=> {
    const data = req.body;

    axios.post('https://third.party.api.com/api/v1', data, headers)
      .then(data => res.json(data.data))
      .catch(err => res.send(err));
    next();
  }
)

我定義的 GET 請求有效,但 POST 無效。 我正在使用 axios 在此處向/api/links POST 中間的第三方 API 進行 POST。 我希望我的端點在成功時從這個第三方 API 返回數據,這就是為什么我有res.json(data.data) 我在 GET 路由中使用res.json沒有問題,但是當我在我的 POST 路由中使用它時,我收到錯誤[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the clientres.json()[ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client 我試過去掉 axios 並改用普通的https ,但我仍然遇到同樣的錯誤。 我究竟做錯了什么?

由於回調, next 將在您返回響應之前被調用(因此后續處理程序將在您從 post 調用返回之前已經發送了響應)。 這就是為什么會出現 ERR_HTTP_HEADERS_SENT 錯誤。

所以而不是:

axios.post('https://third.party.api.com/api/v1', data, headers)
  .then(data => res.json(data.data))
  .catch(err => res.send(err));
next();

這個:

axios.post('https://third.party.api.com/api/v1', data, headers)
  .then(data => res.json(data.data))
  .then(_=>     next())
  .catch(err => res.send(err));

您可能想查看您的 get 處理程序並查看您在那里實際執行的操作。

如果您沒有安裝任何后處理中間件,則根本不應調用 next。 但我假設你這樣做。 查看此線程以獲取更多信息: 我需要在 res.send() 之后調用 next() 嗎?

問題的原因仍然是在承諾解決之前調用 next() 。

刪除對next()的調用。 這將繼續路由並從其他處理程序發送一些其他響應。 當您在自己的處理過程中發送響應時,您希望結束路由,並且通過不調用next()

暫無
暫無

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

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