2015-06-30 4 views
2

Я использовал экспресс и там вы можете пройти несколько методов, которые передаются по маршруту, как следующее:Несколько методов обработчика hapijs

app.get('/users/,[ 
    validator.validate, 
    controller.get 
]); 

Каждый из функции затем передает управление следующей функции в массиве используя обратный вызов next(). Есть ли что-то такое, что можно сделать в обработчиках hapijs? Я хотел бы, чтобы моя функция была как многоразовой, так и независимой, как у нас есть для express обработчиков маршрутов.

Спасибо.

ответ

5

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 
     ] 
    }, 
    ... 
}); 
Смежные вопросы