1

我有一个 expressjs 服务器,它使用 sendFile 函数将文件发送给它的客户端。我使用函数的回调来知道何时发生错误。现在看来,每当 sendFile 决定以 304 响应(在我的情况下这是所需的行为)时,它的回调就会被调用并出现以下错误:

Error: Request aborted: sendFile error
    at Object._onImmediate (.../node_modules/express/lib/response.js:941:17)
    at processImmediate [as _immediateCallback] (timers.js:336:15)
 { [Error: Request aborted: sendFile error] code: 'ECONNABORT' }

但是,我找不到任何有关此的文档,并且我想知道如何确定何时忽略此错误以及何时对其做出反应,因为似乎在其他情况下,此类错误是问题的征兆,而不仅仅是期望行为的副作用。

这确实是 sendFile 应该做的吗?有这方面的任何文件吗?如何将此错误与其他 ECONNABORT 错误区分开来?

4

1 回答 1

3

response.statusCode 可以帮助检测这种情况,但我不知道这是否也捕获其他错误。这是我改编自文档的修改代码

res.sendFile(filename, options, function (err) {
  if (err) {
    if (err.code === "ECONNABORT" && res.statusCode == 304) {
      // No problem, 304 means client cache hit, so no data sent.
      console.log('304 cache hit for ' + filename);
      return;
    }
    console.error("SendFile error:", err, " (status: " + err.status + ")");
    if (err.status) {
      res.status(err.status).end();
    }
  }
  else {
    console.log('Sent:', filename);
  }
于 2014-10-08T18:49:34.327 回答