在写操作节点js期间文件变空

时间:2015-05-13 14:35:12

标签: node.js

我在以下两种情况下发现了这个问题。

  1. 当服务器上有足够的可用空间时。
  2. 当服务器上没有可用空间时。
  3. 我正在使用以下内容阅读特定的JSON文件:

    fs.readFileSync(_file_path, 'utf-8');
    

    在对接收到的数据进行一些操作之后,我使用以下命令将更新的数据写入同一文件:

    fs.writeFileSync(_file_path, {stringified-json});
    

    在此操作期间,我的文件有时会变空,现在我尝试在本地重现此问题但无法重现它。

1 个答案:

答案 0 :(得分:1)

如果出现错误,

fs.writeFileSync()会抛出,因此请确保您的代码位于try / catch块中,并且catch并非只是吞下了错误。 (例如,空catch块将导致吞下异常,或者换句话说,忽略该异常。)

如果这是一个脚本或其他一些可能同时被多次调用的进程(例如,多个进程或你正在使用worker),那么你需要使用文件锁定或其他一些机制来确保你没有有竞争条件。如果进程A打开文件进行写入(从而清空它),然后进程B打开文件以便在进程A完成文件之前读取,如果进程B读取空文件并且代码被写入,则可能导致空文件因此它会写一个空文件。

如果没有更多信息(例如,错误日志),任何答案都可能是纯粹的猜测工作。但这些是我要检查的两件事。