我正在使用hapi.js作为我的api框架,我有一个GET路径下载文件(服务器上的临时文件)的场景。
完成下载后,服务器将删除临时文件。
目前,使用Hapi.response.File
完成文件下载 var response = new Hapi.response.File(path);
req.reply(response).header('Content-disposition', 'attachment; filename=' + doc[0].file.name).header('Content-type', mimetype);
是否有一种简单的方法可以注入'on end'事件函数?
答案 0 :(得分:5)
不确定它是否被认为是简单的,但您可以挂钩Hapi的onPreResponse
服务器事件,并从那里听取finish
响应事件。根据Hapi文档,finish
事件是
在响应完成写入但在客户端之前发出 响应连接已结束。
因此,删除该事件的临时文件应该是安全的。
这样的事情可以解决问题(基于Hapi v6.0.x):
server.ext('onPreResponse', function (request, reply) {
// other code here, e.g. boom checking
if ( ... ) { // Test to see if the request was to download tmp file
request.response.once('finish', function () {
// delete tmp file here
});
}
reply(request.response);
});
此外,还有更简洁的文件服务方式:
reply.file(path, [options])
查看文档here