10

在 hapi 处理程序中,我尝试在代码的前面设置响应的标头,然后再发回视图。

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

{....}

reply.view('myView', myContext);

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

谢谢你的帮助。

4

5 回答 5

7

/**************** 自 HAPI V.17 以来的重大变化 ****************/

自 hapi v.17 以来的重大更改 真正的重大更改大多数代码和库以及 api 已更改,并且 prev 样板或指南无济于事。所以你需要寻找带有 hapi v.17 标记的新文章

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

首先reply()是无效的,你应该使用reply.response()

第二在新指南中,它的参数reply发生了变化,h因此可以命名为任何名称,但指南正在使用h,因此您也可以使用 h 。

第三,hold()没有定义好,也不需要。

第四,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;
        }
}
于 2018-05-04T19:44:01.283 回答
6


为当前在 hapi 6.6.0 中测试的每个响应设置标头

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

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

 reply();

});
于 2014-12-12T11:36:45.633 回答
5

可以使用hold方法如下

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

甚至

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

回复一直保留到您调用 .send() 方法,因此:

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

可能是您正在寻找的。

于 2014-10-06T13:33:56.130 回答
0

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

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

这样可行

于 2014-10-06T13:55:03.370 回答
0

你应该可以使用

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

// other stuff

response.send();
于 2014-10-06T12:44:29.527 回答