2016-11-03 4 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" } 

と)(のsetIntervalを削除する必要は何がある場合は、すべて、たとえば、XX秒をチェックするために:より良い方法は、次のようないくつかの連想配列(オブジェクト)へのファイルに関する情報を格納することです。私。全体の構造を通過し、10分以上前にanythignが作成されたかどうかを確認します。このようなすべての要素に対して、ファイルを削除して配列から削除します。

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

まあ...削除したいファイルごとにタイムアウトを作成しないでください。すべての保留中のファイルを処理する1つの繰り返しタスクを作成します。そして、はい、あなたのサーバーが起動したときにこの方法を起動します。保留中の配列が空の場合、このメソッドは単に何もしません。 –

+0

意味があります。アドバイスをいただきありがとうございます。 – ItsGreg

関連する問題