How can I add a middleware in my route?

Antonio Sandoval picture Antonio Sandoval · Jul 10, 2015 · Viewed 13.1k times · Source

In express I have something like this:

router.get('/foo', middlewareFunction, function (req, res) {
    res.send('YoYo');
});

What is the form for a middleware in hapi? When I have this:

server.route({
    method: 'GET',
    path: '/foo',
    handler: function (request, reply) {
        reply('YoYo');
    }
})

Answer

Chung Nguyen picture Chung Nguyen · Aug 12, 2016

The route pre option allows defining such pre-handler methods, please have a look at http://hapijs.com/api#route-prerequisites

const Hapi = require('hapi');
const server = new Hapi.Server();
server.connection({ port: 80 });

const pre1 = function (request, reply) {

    return reply('Hello');
};

const pre2 = function (request, reply) {

    return reply('World');
};

const pre3 = function (request, reply) {

    return reply(request.pre.m1 + ' ' + request.pre.m2);
};

server.route({
    method: 'GET',
    path: '/',
    config: {
        pre: [
            [
                // m1 and m2 executed in parallel
                { method: pre1, assign: 'm1' },
                { method: pre2, assign: 'm2' }
            ],
            { method: pre3, assign: 'm3' },
        ],
        handler: function (request, reply) {

            return reply(request.pre.m3 + '\n');
        }
    }
});