2016-11-03 4 views
0

Ich erstelle ein REST-Backend mit ExpressJS. Ein Teil des Backends erlaubt Benutzern, Datei-Assets hochzuladen, die nur für 10 Minuten existieren sollten.Wird setTimeout sicherstellen, dass etwas in NodeJS ausgeführt wird?

Es sicher zu verwenden setTimeout, um die Datei nach 10 Minuten zu löschen, oder gibt es bessere Möglichkeiten, dies in NodeJS zu tun? Wie kann ich sicherstellen, dass die Datei gelöscht wird? Hier ist meine aktuelle Lösung:

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

Antwort

0

Ihr Ansatz wird nicht skalieren, da es möglicherweise eine große Anzahl von verzögerten Methoden erstellen wird. Besser ist es, die Informationen über die Datei in ein assoziative Array (Objekt) zu speichern, wie zum Beispiel:

{ "path":"date_uploaded" } 

Und jeden zu überprüfen, sagen sie, XX Sekunden, wenn es etwas ist, das mit setInterval muss das Löschen(). I.e. gehe durch die ganze Struktur und schau, ob anythign vor mehr als 10 Minuten erstellt wurde. Für alle diese Elemente löschen Sie die Datei und entfernen sie aus dem Array.

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

Also sollte ich nicht 'setTimeout' innerhalb' router.post' verwenden? – ItsGreg

+0

Nun ... Sie sollten kein Zeitlimit für jede Datei erstellen, die Sie löschen möchten. Erstellen Sie eine einzelne sich wiederholende Aufgabe, die alle ausstehenden Dateien behandelt. Und ja, ich würde diese Methode starten, wenn der Server gestartet wird. Wenn das ausstehende Array leer ist, wird diese Methode einfach nichts tun. –

+0

Das macht Sinn. Danke für den Hinweis. – ItsGreg

Verwandte Themen