hapijs处理程序的多种方法

时间:2015-06-30 05:18:14

标签: node.js hapijs

我已经使用了express,你可以传递多个方法来传递一个如下的路径:

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

然后,每个函数都使用 next()回调将控制传递给数组中的下一个函数。有没有相同的东西可以在hapijs处理程序中完成?我希望我的函数既可以重用又可以像 express 路由处理程序一样独立。

感谢。

1 个答案:

答案 0 :(得分:6)

hapi有Route Prerequisites,它允许你在实际的处理程序本身之前运行一组类似于处理程序的函数。这两者都是可重用的,并且可以在配置本身之外定义它们。

request.pre对象上设置的每个pre get中生成的值,以便在处理程序中使用。这是一个例子:

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);
    } 
});

默认情况下,每个pre都将按顺序运行,类似于async包中的async.series/waterfall函数。如果你想让一组pres相互并行运行,只需将它们放在一个数组中就可以获得类似async.parallel的内容:

server.route({
    ...
    config: {
        pre: [
            [ step1, step2 ], // these run together
            step3             // and then this one
        ]
    },
    ...
});