在hapi处理程序中,我尝试在发送回视图之前在代码中设置我的响应的标题。
reply().header('cache-control', 'no-cache');
{....}
reply.view('myView', myContext);
您是否必须使用hold
方法?在这种情况下,如何在渲染视图时重用响应?
感谢您的帮助。
答案 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();
有效