如何向 hapi 服务器在路由中发送的每种响应发送自定义 header

how to send an custom header to each kind of response the hapi server sends in a route

我想发送一个特定于路线的自定义 header

问题是我的路由处理程序如下:

function(req,reply){
   if(req.file) req.file.on('error', reply);
   else {
     if(cond1) reply('OK');
     else if(cond2) reply({obj:obj2});
     else if(cond3) reply(boom.badRequest('Ohhh.. Something wrong'));
     else .. // so many conditions.
  }
}

我只想设置该自定义 header 一次,而不是每次我执行一个条件时。

我该怎么做? 在 hapi 文档中,我只能找到通过链接或详细信息发送 header 的方法。两者都不适合这种情况。因为我将不得不在代码中一次又一次地写同样的东西。

制作通用功能还可以,但我想要更简单的东西。 像这样 reply.setHeaderForAllResponseInThisRoute(myHeaderName, value);

如果 value 不是错误,调用 reply(value) 会给你一个 response 对象。如果这是一个错误,你会得到一个 Boom 对象。

响应对象有一个可链接的 header(key. value) 方法,您可以利用它来做您需要的事情:

server.route({
    method: 'GET',
    path: '/',
    handler: function (request, reply) {

        var cond1 = ...;
        var cond2 = ...;
        var cond3 = ...;
        var response;

        if (cond1) {

            // header only applied in this condition

            response = reply(...).header('x-custom-header', 'custom');
        } else if (cond2) {
            response = reply(...);
        } else if (cond3) {
            response = reply(...);
        } else {
            response = reply(...);
        }

        // Headers applied to all responses except errors

        if (!response.isBoom) {
            response.header('x-header-1', 'value1')
                    .header('x-header-2', 'value2');
        }
    }
});