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

README.md

About

Inspired by https://github.com/Marsup/hapi-mongodb, here's another mysql plugin that is based on node-mysql2 for hapijs that supports multiple connections.

Updates

  • 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

Options

  • 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 https://github.com/mysqljs/mysql#pooling-connections, note if you do not specify connectionLimit in settings, a default number of 10 will be used.

Example

/*
    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
    })

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

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

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

launchServer().catch(err => {
    console.error(err)
    process.exit(1)
})

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