我使用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的许多例子跳过使用回调,从而给人的印象,这是一个同步调用。不是这样。请始终使用回调,检查是否成功,然后才转到“下一个”中间件,或者如果发送失败,采取适当措施。如果不这样做,可能会导致难以在异步环境中调试后果。
当使用'res.sendFile'时,即使'res.statusCode'为'200',我也看到了一些'ECONNABORTED'。目前我还没有找到解决方案。 – paperclip