【问题标题】:fs.stat not calling callback on Windowsfs.stat 不在 Windows 上调用回调
【发布时间】:2013-06-07 09:08:55
【问题描述】:

我有一个使用 Winston 日志库的节点应用程序,它在 Winston 文件传输代码中调用 fs.stat 时失败。有问题的代码是(file.js 大约第 515-536 行):

console.log("fullname = " + fullname);

fs.stat(fullname, function (err, stats) {
  console.log("CALLBACK");
  if (err) {
    if (err.code !== 'ENOENT') {
      return self.emit('error', err);
    }

    return createAndFlush(0);
  }

  if (!stats || (self.maxsize && stats.size >= self.maxsize)) {
    //
    // If `stats.size` is greater than the `maxsize` for
    // this instance then try again
    //
    return checkFile(self._getFile(true));
  }

  createAndFlush(stats.size);
});

我已经添加了 console.log 调用。第一个 on 在第一个日志事件时打印,但第二个永远不会到达。

应用程序在 Windows 7 32 位的 Node.js 0.10.10 下运行。它适用于 Linux。 应用程序的 http 服务器继续为事件提供服务,因此主事件循环正常。

以下简短的应用程序对于一个存在的文件和一个不存在的文件正确运行:

fs = require('fs');

fs.stat('c:\\apiserver\\v8.log', function(err, st) {
    console.dir(err);
    console.dir(st);
});

【问题讨论】:

    标签: node.js fs winston


    【解决方案1】:

    这个问题似乎出现在日志调用发生在域的错误处理程序中。域是实验性的,所以我想我不应该太惊讶。解决方法是显式捕获错误(在这种情况下由 JSON.parse("rubbish text") 引起)并从 catch 块调用日志。对 log 的调用仍在域范围内,因此它本身不是问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多