2016-08-19 25 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