为什么 Node.js Express 调用在请求关闭之前对带有数据的 POST 请求请求“关闭”?

问题描述 投票:0回答:0

我已经使用 Node.js 和 Express 实现了一个简单的流媒体服务器。服务器使用 POST 端点定期发送数据块。但是,我观察到当请求中有数据时,请求关闭事件会立即触发,即使我没有明确地从客户端关闭请求。

这是我的 POST 请求流示例的代码片段:

const express = require("express");
const app = express();

app.use(express.json());

// POST request streaming example
app.post("/stream-post", (req, res) => {
  res.setHeader("Content-Type", "text/plain");
  res.setHeader("Transfer-Encoding", "chunked");

  const intervalId = setInterval(() => {
    res.write("This is a chunk of streaming data.\n");
  }, 1000);

  // Cleanup when the connection is closed
  req.on("close", () => {
    clearInterval(intervalId);
    res.end();
  });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}`);
});

当我使用以下 cURL 命令向此端点发送带有数据的 POST 请求时,立即触发关闭事件:

curl -i --no-buffer -X POST http://localhost:3000/stream-post \
  -H "Content-Type: application/json" \
  -d '{
    "this is a test": "value"
  }'

但是,当请求中没有数据时,不会立即触发关闭事件。

这种行为背后的原因可能是什么?有没有办法保证close事件只在request真正关闭的时候触发,而不管request中有没有数据?

node.js express http request streaming
© www.soinside.com 2019 - 2024. All rights reserved.