Как отправить пользовательский заголовок на каждый вид ответа, который сервер хапи отправляет в маршрут

Я хочу отправить пользовательский заголовок, определенный для маршрута

Дело в том, что мой обработчик маршрута выглядит следующим образом:

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.
  }
}

Я хочу установить этот пользовательский заголовок только один раз, а не каждый раз, когда я выполняю условие.

Как я могу это сделать? в хапи документах я мог только найти, чтобы отправить заголовки через цепочку или подробно. Оба не подходят в этом случае. Поскольку мне придется снова и снова писать то же самое в коде.

Создание общей функции - это нормально, но я хочу что-то более простое. что-то вроде этого reply.setHeaderForAllResponseInThisRoute(myHeaderName, value);

1 ответ

Решение

Призвание reply(value) дает вам response предоставленный объект value это не ошибка Если это ошибка, вы получаете объект 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');
        }
    }
});
Другие вопросы по тегам