Hapi.response.File回复完成

时间:2014-01-17 03:28:19

标签: node.js

我正在使用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'事件函数?

1 个答案:

答案 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