Another simple mysql plugin for hapijs that supports multiple connections, inspired by
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib switch to using mocha/chai Jul 16, 2018
.gitignore ignore coverage/ Jun 24, 2018 updated Jan 7, 2018
package-lock.json 2.2.3 Jul 16, 2018
package.json 2.2.3 Jul 16, 2018


Inspired by, here's another mysql plugin that is based on node-mysql2 for hapijs that supports multiple connections.


  • Starting from version 2, I've switched to using node-mysql2
  • Starting from version 1.0.0 this plugin only supports Hapi version 17 and above. If you are using hapijs prior to version 17, please checkout version 0.9.5


  • decorate: string or boolean, mixed use of different types of decorate settings are not allowed.

  • settings: the options to initialize a pooling connection, can be either a string or object. For detail usage please refer to, note if you do not specify connectionLimit in settings, a default number of 10 will be used.


    Database preparation:
    create database if not exists test;
    create table if not exists info(id int unsigned auto_increment primary key, name varchar(50));
    insert into table info(name) values ('test1'), ('test 2'), ('3'), ('something else');
const Hapi = require('hapi')
const Boom = require('boom')

const launchServer = async function() {
    const clientOpts = {
        settings: 'mysql://user:secret@localhost/test',
        decorate: true
    const server = Hapi.Server({ port: 8080 })

    await server.register({
        plugin: require('hapi-mysql2'),
        options: clientOpts

        method: 'GET',
        path: '/info',
        async handler(request) {
            const pool = request.mysql.pool

            try {
                const [rows, fields] = await pool.query('select * from limit 10;')
                return rows
            } catch (err) {
                throw Boom.internal('Internal Mysql Error', err)

    await server.start()
    console.log(`Server started at ${}`)

launchServer().catch(err => {

See lib/index.test.js for more usage examples.