NodeJS 发送响应前设置头

t30tvxxf  于 2023-04-20  发布在  Node.js
关注(0)|答案(6)|浏览(176)

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

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

{....}

reply.view('myView', myContext);

我必须使用hold方法吗?在这种情况下,我如何在呈现视图时重用响应?
谢谢你的帮助。

d4so4syb

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和响应部分就行了

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;
        }
}
pkln4tw6

pkln4tw62#

在每个响应上设置标头
目前在hapi 6.6.0中测试

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

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

 reply();

});
gev0vcfq

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();

可能就是你要找的。

7fyelxc5

7fyelxc54#

你应该可以用

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

// other stuff

response.send();
n6lpvg4x

n6lpvg4x5#

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

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

那也行

dtcbnfnu

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;
});

相关问题