node.js - 在 Express/Node 中使用 sendFile 时出现随机 'ECONNABORTED' 错误

标签 node.js multithreading express

我已经设置了一个带有 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/

相关文章:

java - py4J 在多线程java上获取新的通信 channel 时出错

Java ExecutorService REST 调用错误

node.js - 在 node.js 中从字符串创建一个文本文件并将其作为响应流式传输

javascript - 分层对象中的深度过滤

javascript - 无法使用 GET 方法获取个人资料页面?

java - 方法产量如何工作?

node.js - 类型错误 : Cannot read property '_id' of undefined

node.js - 如何在 Nodejs 和 Express 中重用数据库连接

node.js - 在 Windows 7 中安装 sails 时出错

javascript - Node-XMPP 字符串准备错误