2016-11-03 64 views
0

我正在使用ExpressJS創建REST後端。後端的一部分允許用戶上傳文件資產,這應該只存在10分鐘。將使用setTimeout確保在NodeJS中執行某些操作?

安全使用setTimeout,10分鐘後刪除文件,還是有更好的方法在NodeJS中做到這一點?我如何確保文件被刪除?這是我目前的解決方案:

router.post('/upload', fileUpload.single('asset'), (req, res) => { 
    // Do something with the file 
    res.status(201).end(); 
    setTimeout(() => { 
    // Delete the file 
    }, 600000); 
}); 

回答

0

您的方法不會擴展,因爲它可能會創建大量的延遲方法。更好的方法是存儲有關文件到一些關聯數組(對象)的信息,例如:

{ "path":"date_uploaded" } 

,並檢查每一個,比方說,XX秒,如果有任何需要在使用setInterval刪除()。即仔細檢查整個結構,看看10分鐘前是否有任何創建。對於所有這些元素,您將刪除該文件並將其從陣列中刪除。

var pending = {}; 

router.post('/upload', fileUpload.single('asset'), (req, res) => { 
    // Do something with the file 
    pending[file_name] = (new Date()).getTime(); 
    res.status(201).end(); 
}); 

setInterval(
function(){ 
    // check each element of pending and see if it needs to be deleted 
}, 30000); 
+0

所以我不應該在'router.post'裏面使用'setTimeout'? – ItsGreg

+0

那麼...你不應該爲每個你想刪除的文件創建一個超時。創建一個處理所有待處理文件的重複任務。是的,當你的服務器開始運行時,我會啓動這個方法。如果待處理的數組爲空,則此方法將無法執行任何操作。 –

+0

這很有道理。感謝您的建議。 – ItsGreg

相關問題