hapi устанавливает заголовок перед отправкой ответа

В обработчике hapi я пытаюсь установить заголовок своего ответа ранее в коде, прежде чем отправлять обратно представление.

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

{....}

reply.view('myView', myContext);

Я должен использовать метод hold? В этом случае, как мне повторно использовать ответ при рендеринге представления?

Спасибо за вашу помощь.


person CarolineBda    schedule 06.10.2014    source источник
comment
нарушение изменилось с hapi v.17, пожалуйста, проверьте мой ответ.   -  person Mishel Parkour    schedule 04.05.2018


Ответы (5)


установить заголовок для каждого ответа
, который в настоящее время тестируется в hapi 6.6.0

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

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

 reply();

});
person Roman Rhrn Nesterov    schedule 12.12.2014
comment
нарушение изменилось с hapi v.17, пожалуйста, проверьте мой ответ. - person Mishel Parkour; 04.05.2018

Вы можете использовать метод удержания следующим образом

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

или даже

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

ответ удерживается до тех пор, пока вы не вызовете метод .send(), следовательно:

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

вероятно, то, что вы ищете.

person Antony Jones    schedule 06.10.2014
comment
нарушение изменилось с hapi v.17, пожалуйста, проверьте мой ответ. - person Mishel Parkour; 04.05.2018

/****************** ОСНОВНЫЕ ИЗМЕНЕНИЯ ПОСЛЕ HAPI V.17 ****************/

Критические изменения, начиная с hapi v.17, настоящие критические изменения, большинство кодов, библиотек и API изменены, а предыдущие шаблоны или руководства не могут сильно помочь. Так что вам нужно искать новые статьи с тегами 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;
        }
}
person Mishel Parkour    schedule 04.05.2018

Вы должны быть в состоянии использовать

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

// other stuff

response.send();
person doodlemoonch    schedule 06.10.2014
comment
Дело в том, что в тот момент, когда я хочу установить свой заголовок, у меня еще нет myContext. Вот почему я хотел бы подготовить свой ответ, установив заголовок раньше, а позже отправив представление обратно - person CarolineBda; 06.10.2014
comment
нарушение изменилось с hapi v.17, пожалуйста, проверьте мой ответ. - person Mishel Parkour; 04.05.2018

Итак, вот что я сделал (не уверен, что это лучшее решение):

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

Это работает

person CarolineBda    schedule 06.10.2014
comment
нарушение изменилось с hapi v.17, пожалуйста, проверьте мой ответ. - person Mishel Parkour; 04.05.2018