在一个hapi处理程序中,我尝试在代码的前面设置一个响应的头,然后再发送回一个视图。
reply().header('cache-control', 'no-cache'); {....} reply.view('myView', myContext);
我必须使用hold方法吗?在这种情况下,我如何在呈现视图时重用响应?谢谢你的帮助。
hold
d4so4syb1#
/自HAPI V.17以来的重大变化*/自hapi v.17以来的突破性变化真实的的突破性变化大多数代码和库和api都发生了变化,以前的样板或指南没有多大帮助。API页面:https://hapijs.com/api#response-toolkit第一个reply()无效,您应该使用reply.response()第二,在新的指南中,reply被修改为h,它的参数可以被命名为任何东西,但指南使用的是h,所以你也可以使用h。第三,hold()没有定义,也不需要。第四,send()是不需要的,甚至没有定义,我认为。还有一些其他的变化。请查看上面的API链接。所以这是我写的代码的一部分,应该能给予一些好的信息。不要关心整个函数,只要看看h和响应部分就行了
reply()
reply.response()
reply
h
hold()
send()
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; } }
pkln4tw62#
在每个响应上设置标头目前在hapi 6.6.0中测试
server.ext('onPreResponse', function(request, reply) { request.response.header('X-API-VERSION', '0.0.1'); reply(); });
gev0vcfq3#
可以按如下方式使用hold方法
reply.hold(); reply.view('your-view');
甚至
reply.view('your-view').hold(); reply.send();
在调用.send()方法之前,应答将被保留,因此:
reply().header('cache-control', 'no-cache').hold(); ... reply().send();
可能就是你要找的。
7fyelxc54#
你应该可以用
var response = request.view('myView', myContext).header('cache-control: no-cache').hold(); // other stuff response.send();
n6lpvg4x5#
这就是我所做的(不确定这是最好的解决方案):
var response; {...} response = reply().header('cache-control', 'no-cache').hold(); {...} response = response || reply.view('summary', summary).hold(); response.send();
那也行
dtcbnfnu6#
如果有人正在寻找Hapi v17+的非视图响应的答案。使用响应工具包(称为h)发送各个响应
h.response(response).code(statusCode).header('header-here', 'header-value-here);
或者,您可以使用onPreResponse事件为所有响应创建标头
server.ext('onPreResponse', (request, h) => { request.response.header('x-123', '123'); return h.continue; });
6条答案
按热度按时间d4so4syb1#
/自HAPI V.17以来的重大变化*/
自hapi v.17以来的突破性变化真实的的突破性变化大多数代码和库和api都发生了变化,以前的样板或指南没有多大帮助。
API页面:https://hapijs.com/api#response-toolkit
第一个
reply()
无效,您应该使用reply.response()
第二,在新的指南中,
reply
被修改为h
,它的参数可以被命名为任何东西,但指南使用的是h
,所以你也可以使用h。第三,
hold()
没有定义,也不需要。第四,
send()
是不需要的,甚至没有定义,我认为。还有一些其他的变化。请查看上面的API链接。
所以这是我写的代码的一部分,应该能给予一些好的信息。不要关心整个函数,只要看看h和响应部分就行了
pkln4tw62#
在每个响应上设置标头
目前在hapi 6.6.0中测试
gev0vcfq3#
可以按如下方式使用hold方法
甚至
在调用.send()方法之前,应答将被保留,因此:
可能就是你要找的。
7fyelxc54#
你应该可以用
n6lpvg4x5#
这就是我所做的(不确定这是最好的解决方案):
那也行
dtcbnfnu6#
如果有人正在寻找Hapi v17+的非视图响应的答案。
使用响应工具包(称为
h
)发送各个响应或者,您可以使用onPreResponse事件为所有响应创建标头