fs.stat没有在Windows上调用回调

时间:2013-06-07 09:08:56

标签: node.js fs winston

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

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调用。第一个打印在第一个记录事件,但第二个从未到达。

应用程序在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);
});

1 个答案:

答案 0 :(得分:0)

在域的错误处理程序中发生日志调用时,似乎会出现此问题。域名是实验性的,所以我想我不应该太惊讶。修复是显式捕获错误(在这种情况下由JSON.parse(“垃圾文本”)引起)并从catch块调用日志。对日志的调用仍然在域的范围内,因此本身不是问题。