在Express/Node中使用sendFile时出现随机'ECONNABORTED'错误

Sun*_*nny 9 multithreading node.js express

我已经设置了一个带有Express中间件的节点服务器.在加载一个触发大约10个其他加载(js,css等)的HTML文件时,我在某些文件上随机获得ECONNABORTED错误.确切的错误是:

 { [Error: Request aborted] code: 'ECONNABORTED' }
Run Code Online (Sandbox Code Playgroud)

由此简化代码生成(在我尝试调试问题之后):

 res.sendFile(res.locals.physicalUrl,function (err) {
   if (err)
      console.log(err);
   ...
  }
Run Code Online (Sandbox Code Playgroud)

许多帖子都谈到了由于未指定完整路径名而导致的此错误.这不是这里的情况.我确实指定了完整路径,实际上错误是随机生成的.有时候页面及其所有后续链接都会完美加载,有时则不会.我试图刷新缓存,但没有找到任何模式来连接它.

此特定错误似乎是套接字连接中止的通用术语,并在其他应用程序(如FTP)的上下文中进行了讨论.

在意识到可以增加节点工作线程之后,我尝试使用以下方法:

process.env.UV_THREADPOOL_SIZE = 20;
Run Code Online (Sandbox Code Playgroud)

但是,我的理解是,即使没有这个,最多文件传输可能必须等待工作线程空闲而不会中止.我不是在谈论大文件,所有文件都不到1 MB.

我有一种直觉,认为这与节点直接无关.

请指出处理此错误的任何其他可能性(节点或其他).还有,其他任何间接解决方案?重试几次可能是一次,但那会很笨拙.编辑:不,我不能重试.标题已经发送错误!

侧面注意: 关于使用sendFile的许多示例都使用回调跳过,从而给人一种同步调用的印象.它不是.请始终使用回调,检查是否成功,然后转到"下一个"中间件,或者如果发送因任何原因失败,请采取适当的步骤.不这样做会使调试异步环境中的后果变得困难.

Gab*_*Lee 5

请参阅/sf/answers/2586474201/ 是否有可能在某些情况下您通过res.end在异步调用res.sendFile结束之前调用来终止连接?

如果情况并非如此 - 您能否粘贴更多应用程序代码?