2012-10-11 54 views
1

我的Node.js應用程序運行的功能,每秒(遞歸)讀取上傳.json文件的目錄樹。這些文件通過FTP從客戶端上載到服務器,並放置在運行節點腳本的文件夾中。Node.js的READFILE競爭狀態 - 讀文件時沒有完全寫入磁盤

我發現的東西(至少是我認爲發生的事情)是,節點不會等待.json文件在嘗試讀取之前完全寫入,因此會拋出「意外結束輸入'錯誤。看起來好像文件系統需要幾秒鐘(毫秒)才能正確寫入文件。這也可能與正在從FTP寫入的文件有關(可能的開銷,我完全猜測在這裏...)

有沒有一種方法,我們可以等待文件完全寫入文件系統在嘗試讀取節點之前?

fs.readFile(file, 'utf8', function(err, data) { 
    var json = JSON.parse(data); // throws error 
}); 

回答

1

您可以檢查文件是否仍與這一不斷增長:

https://github.com/felixge/node-growing-file

+0

這似乎正是我需要的 - 雖然它似乎是打破我的一些其他代碼..我'只是使用'require('grow-file')。open(file).on('end',function(err){fs.readFile(file,'utf8',function(err,data){... });}); 「我認爲這是正確的方法去做呢? – crawf

+0

我自己沒有用過它。我沒有看到您在文檔中傳遞超時或間隔選項。 –