2016-08-19 21 views
3

我有一個簡單的基於Express 4的API,可輸出基於某些提供的參數生成的MP3文件。但是,我似乎無法刪除這個臨時的MP3文件後,已經發出響應。在發送響應之後刪除臨時文件的正確方法

我有什麼:

app.get('/endpoint', function(request, response) { 

    // Distill parameters from request and create tempFileMp3 

    var stat = Fs.statSync(tempFileMp3); 

    response.writeHead(status, { 
    'Content-Type': 'audio/mpeg', 
    'Content-Length': stat.size 
    }); 

    stream = Fs.createReadStream(tempFileMp3); 
    stream.pipe(response); 
}); 

起初,我希望我能在stream事件刪除tempFileMp3,無論是endfinish事件:

stream 
    .on('end', function() { 
    Fs.unlinkSync(tempFileMp3); 
    }) 
    .on('close', function() { 
    Fs.unlinkSync(tempFileMp3); 
    }) 
; 

但無論是endclose事件被解僱。

如何在響應發送後刪除臨時MP3文件?

+0

嘗試'stream.on( '完成',函數(){Fs.unlinkSync(tempFileMp3);});'? https://nodejs.org/api/stream.html#stream_event_finish –

+0

@SwarajGiri實際上已經嘗試過。忘了提,無濟於事。 – Luke

回答

1

嘗試捕獲響應光潔度:

res.on('finish', function() { 
    // remove temp files 
}); 

res.on('error', function() { 
    // remove temp files 
}); 
+0

'response.finish'事件似乎被稱爲零星的,即有時它是,有時它不是。有沒有關於這些事件的文件? – Luke