2015-05-13 36 views
0

在以下两种情况下我发现此问题。在写入操作节点js期间文件变空白

  1. 当服务器上有很多可用空间时。
  2. 当服务器上没有可用空间时。

我使用读特定JSON文件如下:

​​

关于接收数据的一些操作之后,我更新的数据使用写入同一文件如下:

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

在此操作过程中,我的文件有时会变空,现在我试图在本地重现此问题,但无法重现此问题。

回答

1

fs.writeFileSync()将抛出,如果出现了错误,所以一定要确保你的代码在try/catch块和你的catch不是简单地吞咽错误。 (例如,空的catch块会导致异常被吞下或换句话说被忽略。)

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

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

+0

如果它抛出,它是不是应该停止整个过程......? –

+0

你说得对。我已经编辑了答案,指定只有在已经有try/catch块并且吞下错误时才会出现这种情况。我还添加了第二种可能性(工人或多个进程之间的竞争条件)。没有更多的信息,我想,任何答案都将在很大程度上推测工作。 – Trott

+0

Trott,我使用try catch错误,但第二种可能性在那里,但我确信我没有清空文件,我仍然会检查它。谢谢。 – HDB