2015-11-16 63 views
9

我使用Express中间件设置了节点服务器。当加载一个触发大约10个其他负载(js,css等)的HTML文件时,我在某些文件上获得了ECONNABORTED错误随机。确切的错误是:在Express/Node中使用sendFile时出现随机'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。

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

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

一个侧面说明: 上使用SENDFILE的许多例子跳过使用回调,从而给人的印象,这是一个同步调用。不是这样。请始终使用回调,检查是否成功,然后才转到“下一个”中间件,或者如果发送失败,采取适当措施。如果不这样做,可能会导致难以在异步环境中调试后果。

+0

当使用'res.sendFile'时,即使'res.statusCode'为'200',我也看到了一些'ECONNABORTED'。目前我还没有找到解决方案。 – paperclip

回答

2

https://stackoverflow.com/a/36949631/2798152 难道是可能的,在某些情况下,终止由异步调用res.sendFile结束之前调用res.end连接?

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

+1

这对我有效。 'res.end'在'res.download'之前被调用。 +1 – Avraham

0

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

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

相关问题