Skip to content

ar4mirez/hapi-handlers

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@ar4mirez/hapi-handlers

npm version CI Node.js License: MIT

Plugin to autoload handlers for hapi.js based on glob patterns.

Note: This package was previously published as hapi-handlers. The scoped package @ar4mirez/hapi-handlers is the actively maintained version.

Requirements

  • Node.js >= 18.0.0
  • @hapi/hapi >= 21.0.0

Installation

npm install @ar4mirez/hapi-handlers

Usage

Basic Registration

const Hapi = require('@hapi/hapi');

const init = async () => {
    const server = Hapi.server({ port: 3000 });

    await server.register({
        plugin: require('@ar4mirez/hapi-handlers'),
        options: {
            includes: 'path/to/**/*Handler.js'
        }
    });

    // Your handlers are now available
    server.route({
        method: 'GET',
        path: '/hello',
        handler: {
            helloHandler: {
                message: 'Hello World!'
            }
        }
    });

    await server.start();
    console.log('Server running on %s', server.info.uri);
};

init();

Multiple Patterns

await server.register({
    plugin: require('@ar4mirez/hapi-handlers'),
    options: {
        includes: [
            'handlers/**/*.js',
            'api/**/handler.js'
        ],
        ignores: ['**/*.test.js']
    }
});

With Glue/Confidence Manifest

const manifest = {
    server: {
        port: 3000
    },
    register: {
        plugins: [
            {
                plugin: '@ar4mirez/hapi-handlers',
                options: {
                    includes: 'handlers/**/*.js',
                    relativeTo: __dirname
                }
            }
        ]
    }
};

Options

includes (required)

  • Type: string | string[]
  • Description: The glob pattern(s) to match handler files.
// Single pattern
includes: 'handlers/**/*.js'

// Multiple patterns
includes: ['handlers/**/*.js', 'api/**/handler.js']

ignores

  • Type: string | string[]
  • Description: Pattern(s) to exclude from matching.
ignores: ['**/*.test.js', '**/*.spec.js']

relativeTo

  • Type: string
  • Default: process.cwd()
  • Description: The base directory for resolving patterns.
relativeTo: __dirname

Handler Signature

Handler files should export a function that returns a hapi handler function:

// handlers/userHandler.js
'use strict';

module.exports = (route, options) => {
    // route: the hapi route configuration
    // options: options passed from route handler config

    return (request, h) => {
        return {
            message: options.message || 'Default message',
            user: request.params.id
        };
    };
};

Using the Handler

server.route({
    method: 'GET',
    path: '/user/{id}',
    handler: {
        userHandler: {
            message: 'User details'
        }
    }
});

Async Handlers

module.exports = (route, options) => {
    return async (request, h) => {
        const user = await fetchUser(request.params.id);
        return user;
    };
};

Migration from v2/v3

Version 4.0.0 has breaking changes to support hapi v21+:

Plugin Registration

// v2/v3 (hapi v13-v16)
server.register({
    register: require('@ar4mirez/hapi-handlers'),
    options: { ... }
}, callback);

// v4 (hapi v21+)
await server.register({
    plugin: require('@ar4mirez/hapi-handlers'),
    options: { ... }
});

Handler Signature

// v2/v3
module.exports = (route, options) => {
    return (request, reply) => {
        return reply({ message: 'Hello' });
    };
};

// v4
module.exports = (route, options) => {
    return (request, h) => {
        return { message: 'Hello' };
        // or: return h.response({ message: 'Hello' });
    };
};

Server Connection

// v2/v3
const server = new Hapi.Server();
server.connection({ port: 3000 });

// v4
const server = Hapi.server({ port: 3000 });

Contributing

See CONTRIBUTING.md for guidelines.

License

MIT - see LICENSE for details.

About

Autoload Handlers for HapiJS.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •