在Express / Node中使用sendFile时发生随机'ECONNABORTED'错误

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

{ [Error: Request aborted] code: 'ECONNABORTED' } 

由这个简化代码生成(在我尝试debugging问题之后):

  res.sendFile(res.locals.physicalUrl,function (err) { if (err) console.log(err); ... } 

很多post都提到由于没有指定完整path名而导致的这个错误。 这不是这里的情况。 我确实指定了完整的path,而且错误是随机生成的。 有时候,页面及其后面的所有链接都可以完美加载,有时甚至没有。 我试图刷新caching,并没有find任何模式来连接它与此。

这个特定的错误似乎是套接字连接中止的一个通用术语,并在其他应用程序(如FTP)的上下文中讨论。

意识到节点工作线程可以增加,我试图这样做使用:

 process.env.UV_THREADPOOL_SIZE = 20; 

然而,我的理解是,即使没有这个,最多文件传输可能不得不等待一个工作线程是免费的,不会被中止。 我不是在这里谈论大文件,所有文件都小于1 MB。

我有一个直觉,这与节点直接无关。

请指出任何其他的可能性(节点或其他)来处理这个错误。 另外还有其他的间接解决scheme吗 重试几次可能是一个,但这将是笨拙的。 编辑:不,我不能重试。 标题已经发送错误!

一边注意:许多使用sendFile的示例跳过使用callback,从而给人的印象是一个同步调用。 不是这样。 请始终使用callback,检查是否成功,然后才能转到“下一个”中间件,或者如果发送失败,采取适当的步骤。 如果不这样做,可能会使debuggingasynchronous环境中的后果变得困难。

请参阅https://stackoverflow.com/a/36949631/2798152在res.sendFile的asynchronous调用结束之前,是否有可能通过调用res.end终止连接?

如果情况并非如此 – 您可以将更多的应用程序代码粘贴到其他位置吗?