我已经设置了一个带有 Express 中间件的 Node 服务器。在加载触发大约 10 个其他加载(js、css 等)的 HTML 文件时,我在某些文件上收到 ECONNABORTED 错误 randomly。确切的错误是:
{ [Error: Request aborted] code: 'ECONNABORTED' }
由这个简化的代码生成(在我尝试调试问题之后):
res.sendFile(res.locals.physicalUrl,function (err) {
if (err)
console.log(err);
...
}
许多帖子都讨论了由于未指定完整路径名而导致的此错误。这不是这里的情况。我确实指定了完整路径,实际上错误是随机生成的。有时页面及其所有后续链接可以完美加载,有时则不能。我试图刷新缓存,但没有找到任何将其与此连接的模式。
此特定错误似乎是套接字连接中止的通用术语,并在 FTP 等其他应用程序的上下文中进行了讨论。
意识到可以增加 Node 工作线程,我尝试这样做:
process.env.UV_THREADPOOL_SIZE = 20;
但是,我的理解是,即使没有这个,文件传输最多可能必须等待工作线程空闲并且不会中止。我这里不是说大文件,所有文件都小于 1 MB。
我有一种直觉,这与 Node 没有直接关系。
请指出任何其他可能性( Node 或其他)来处理此错误。另外,还有其他间接解决方案吗?重试几次可能是其中之一,但这会很笨拙。编辑:不,我不能重试。已发送带有错误的 header !
旁注: 许多使用 sendFile 的示例都跳过了使用回调,从而给人的印象是它是一个同步调用。它不是。始终使用回调,检查是否成功,然后才继续使用“下一个”中间件,或者在发送因任何原因失败时采取适当的步骤。不这样做会使在异步环境中调试结果变得困难。
最佳答案
见 https://stackoverflow.com/a/36949631/2798152
在某些情况下,您是否有可能在对 res.sendFile
的异步调用结束之前通过调用 res.end
来终止连接?
如果不是这样 - 您可以粘贴更多应用程序代码吗?
关于node.js - 在 Express/Node 中使用 sendFile 时出现随机 'ECONNABORTED' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33727675/