在响应发送后删除临时文件的正确方法



我有一个简单的基于Express 4的API,它输出一个MP3文件,该文件是根据提供的一些参数生成的。然而,在回复发出后,我似乎无法删除这个临时MP3文件。

What I have:

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文件?

尝试捕获响应完成:

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

最新更新