错误:请求中止 - 无法使用 Node.js + Express 发送 20MB .mp3 文件?

错误:请求中止 - 无法使用 Node.js + Express 发送 20MB .mp3 文件?

我正在 Heroku 上使用 Node.js + Express 应用制作游戏。页面加载时,会提取 5 个 20MB 的 .mp3 文件中的配乐(音乐)。但有时,请求会挂起,然后抛出错误“请求中止”。这似乎与文件大小有关,因为在提取大文件时总是会发生这种情况,但这种情况只发生在某些时候(例如,20% 的时间)。

以下是简化的源代码:

// server

const app = express();   
 
app.get('/*',
  function(req, res){ 
    req.on('close', ()=>{ write('request complete'); });
if(req.url === '/'){ 
// load homepage
write('sending homepage...'); res.sendFile('homepage.html', {root: __dirname}, onerr); } else 
{ // send the requested file
write(`sending ${req.url}...`); res.sendFile(`${req.url}`, {root: __dirname}, onerr); } 
});
// client:
let ost = [1, 2, 3, 4, 5].map(num=>new Audio(`soundtrack${num}.mp3`));


// output (randomly aborts):
sending filename1.jpg...
request complete
sending filename2.jpg...
request complete
sending soundtrack1.mp3...
request complete
sending soundtrack2.mp3...
Error: Request aborted
at onaborted (/app/node_modules/express/lib/response.js:1052:15)    
at exit (/app/server.js:7:27)
at process.onerr (/app/server.js:35:43)

我试过:

  • 导入 body-parser 并执行app.use(bodyParserErrorHandler());,但我不会在 stdout 中看到任何其他日志来解释该错误。
  • 从 package.json 启动脚本调用NODE_ENV=dev DEBUG=body-parser:*(ChatGPT 建议我这样做但也没有帮助)。
  • 我注意到 stdout 中的一些日志在错误发生后出现,显示“错误 H18:服务器请求中断”。但由于它们出现在错误发生后,因此它们可能是错误的结果,而不是原因。不过,以下是有关 H18 的详细信息,它们可能很重要: An H18 signifies that the socket connected, and some data was sent; The error occurs in cases where the socket was destroyed before sending a complete response, or if the server responds with data before reading the entire body of the incoming request.

我检查了造成这种情况的可能原因,似乎https 通信中存在问题,而不是代码本身的问题。这可能是什么?

相关内容