hapi在发送响应之前设置标头

时间:2014-10-06 09:21:51

标签: javascript node.js header handler hapijs

在hapi处理程序中,我尝试在发送回视图之前在代码中设置我的响应的标题。

reply().header('cache-control', 'no-cache');

{....}

reply.view('myView', myContext);

您是否必须使用hold方法?在这种情况下,如何在渲染视图时重用响应?

感谢您的帮助。

5 个答案:

答案 0 :(得分:7)

在每个回复上设置标题
目前在hapi 6.6.0中测试

server.ext('onPreResponse', function(request, reply) {

 request.response.header('X-API-VERSION', '0.0.1');

 reply();

});

答案 1 :(得分:6)

您可以按如下方式使用hold方法

reply.hold();
reply.view('your-view');

甚至

reply.view('your-view').hold();
reply.send();

回复一直持续到你调用.send()方法,因此:

reply().header('cache-control', 'no-cache').hold();
...
reply().send();

可能就是你要找的东西。

答案 2 :(得分:2)

/ **************** HAPI V.17以来突然发生的变化**************** /

自从hapi v.17真正突破性变化以来,大多数代码和库以及api都发生了变化,并且对锅炉板或指南的帮助不大。所以你需要寻找用hapi v.17标记的新文章

api页面:https://hapijs.com/api#response-toolkit

首先reply()无效,您应该使用reply.response()

新指南中的第二个reply更改为h其参数因此可以命名为任何内容,但由于指南正在使用h,因此您也可以使用h。

第三,hold()没有定义,而且不需要它。

Forth send()不需要,甚至不定义我认为。

还有其他一些变化。请检查上面的api链接。

所以这是我写的代码的一部分应该提供一些好的信息。不关心整个功能只需看看h和响应部分

static _json_response(res, request = null, h = null){
        let ret = '';
        ret = JSON.stringify(res);
        if (request == null || h == null){
                return ret;
        }else{
                const response = h.response(ret)
                        .header('cache-control', 'no-cache')
                        .type('application/json')
                return response;
        }
}

答案 3 :(得分:0)

你应该可以使用

var response = request.view('myView', myContext).header('cache-control: no-cache').hold();

// other stuff

response.send();

答案 4 :(得分:0)

好的,这就是我所做的(不确定它是最好的解决方案):

var response;    
{...}
response = reply().header('cache-control', 'no-cache').hold();
{...}
response = response || reply.view('summary', summary).hold();
response.send();

有效