[英]fs.WriteFile launches callback before actually writing the file
我有以下快速請求回調
zip.addLocalFolder(`/path/to/folder`, `./`);
var data = zip.toBuffer();
fs.writeFile(`path/to/download.zip`,data,function (err) {
if (err) return console.log(err);
res.download(`path/to/download.zip`)
});
fs.writeFile 似乎在調用回調函數后正在寫入文件。
編輯:文件正在成功寫入。 事實上,它是在我執行res.download()
之后寫入導致錯誤的
如果我在 1 秒的 setTimeout 中調用res.download()
,則執行成功結束。
我收到此錯誤:
ENOENT:沒有這樣的文件或目錄,stat 'path/to/download.zip`
將代碼更改為
zip.addLocalFolder(`/path/to/folder`, `./`);
var data = zip.toBuffer();
fs.writeFileSync(`path/to/download.zip`,data);
res.download(`path/to/download.zip`);
有同樣的效果。
我使用的庫adm-zip
有一種編寫 zip 文件的方法,並且使用它具有非常相同的效果。
有什么我想念的嗎?
這里的問題是如果所選文件夾不存在,nodejs 中的本地文件寫入方法將失敗。 因此,在寫入path/to/folder/download.zip
您需要確保所有這些文件夾path/to/folder
已經存在。
實現這一目標的方法很少。 例如,Node v10.12 提供的fs.mkdir
方法
fs.mkdir('/path/to/folder', { recursive: true }, (err) => {
if (err) throw err;
... your write file code here
});
在上面的例子中,node 將首先創建路徑中的所有文件夾(參見recursive:true
選項),然后你可以在那里寫入文件。
重要說明:
如果您確定所有目錄都存在,那么問題是傳遞給方法的路徑錯誤。 考慮使用全局__dirname
變量來解析腳本文件目錄的正確路徑。 如果路徑應該相對於執行應用程序的位置,您也可以在路徑中使用./
前綴。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.