2015-05-13 35 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