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

时间:2015-11-16 02:34:04

标签: node.js multithreading express

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

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

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

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

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

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

意识到可以增加节点工作线程,我尝试使用:

process.env.UV_THREADPOOL_SIZE = 20;

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

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

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

A SIDE注意: 关于使用sendFile的许多示例都使用回调跳过,从而给人一种同步调用的印象。它不是。请始终使用回调,检查是否成功,然后转到" next"中间件或采取适当的步骤,如果发送失败由于任何原因。如果不这样做,就很难在异步环境中调试结果。

2 个答案:

答案 0 :(得分:3)

参见https://stackoverflow.com/a/36949631/2798152 是否有可能在某些情况下通过在res.end的异步调用结束之前调用res.sendFile来终止连接?

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

答案 1 :(得分:0)

卸载并重新安装MongoDB为我解决了这个问题。

我遇到了同样的问题。它开始发生在我不得不强制重新启动我的笔记本电脑,因为它没有响应。重新启动时,尝试使用nodejs连接到mongo服务器,总是抛出ECONNABORTED错误