hapi имеет Route Prerequisites, который позволяет запускать набор обработчиков, подобных функциям, перед самим обработчиком. Они оба являются многоразовыми и независимыми, и вы можете определить их вне самой конфигурации.
Значение, генерируемое в каждом pre get, установлено на объекте request.pre
для использования в вашем обработчике. Вот пример:
var step1 = function (request, reply) {
reply('The quick brown fox ');
};
var step2 = function (request, reply) {
reply('jumped over the lazy dog.');
};
server.route({
config: {
pre: [
step1,
step2
]
},
method: 'GET',
path: '/',
handler: function (request, reply) {
var response = request.pre.step1 + request.pre.step2;
reply(response);
}
});
По умолчанию каждый предварительно будет работать последовательно, подобно async.series/waterfall
функции из async пакета. Если вы хотите, чтобы ряд прессов работал параллельно друг другу, просто поместите их в массив, и вы получите что-то вроде async.parallel
:
server.route({
...
config: {
pre: [
[ step1, step2 ], // these run together
step3 // and then this one
]
},
...
});