簡體   English   中英

ErrorCaptureStackTrace(錯誤); ^ 錯誤 [ERR_HTTP_HEADERS_SENT]:將標頭發送到客戶端后無法設置標頭

[英]ErrorCaptureStackTrace(err); ^ Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client

const seedRouter = express.Router();

seedRouter.get('/', async (req, res) => {
  await Product.remove({});
  const createdProducts = await Product.insertMany(Data.products);
  res.send({ createdProducts });

  await User.remove({});
  const createdUsers = await User.insertMany(Data.users);
  res.send({ createdProducts, createdUsers });
});

export default seedRouter;
node:internal/errors:484
    ErrorCaptureStackTrace(err);
    ^

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at new NodeError (node:internal/errors:393:5)
    at ServerResponse.setHeader (node:_http_outgoing:644:11)
    at ServerResponse.header (F:\Laxman website\E-commerce\backend\node_modules\express\lib\response.js:794:10)
    at ServerResponse.send (F:\Laxman website\E-commerce\backend\node_modules\express\lib\response.js:174:12) 
    at ServerResponse.json (F:\Laxman website\E-commerce\backend\node_modules\express\lib\response.js:278:15) 
    at ServerResponse.send (F:\Laxman website\E-commerce\backend\node_modules\express\lib\response.js:162:21) 
    at file:///F:/Laxman%20website/E-commerce/backend/routes/seedRoutes.js:15:7
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
  code: 'ERR_HTTP_HEADERS_SENT'
}

應用程序崩潰並返回上面的錯誤“無法在將標頭發送到客戶端后設置標頭”。 謝謝你。

此特定錯誤是由於嘗試向同一請求發送多個響應而引起的。 在您的特定情況下,您在同一個請求中兩次調用res.send() 你不能那樣做,因為res.send()結束了請求。

我們不知道您要在請求處理程序中完成什么,但看來您可以刪除第一個res.send({ createdProducts }); 因為您已經在第二個中發送了該數據。

您還需要圍繞await進行try/catch ,以便捕獲 promise 拒絕並可以發送錯誤響應。

seedRouter.get('/', async (req, res) => {
  try {
      await Product.remove({});
      const createdProducts = await Product.insertMany(Data.products);

      await User.remove({});
      const createdUsers = await User.insertMany(Data.users);
      res.send({ createdProducts, createdUsers });
 } catch(e) {
      console.log(e);
      res.sendStatus(500);
 }
});

暫無
暫無

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

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