Skip to content

jimmyolo/fastify-mariadb

Repository files navigation

Fastify MariaDB Pool plugin

Build Status Known Vulnerabilities codecov

npm version npm downloads

Fastify MariaDB connection Pool plugin, with this you can share the same MariaDB connection pool in every part of your server.

Under the hood the offical MariaDB Node.js connector is used, the options that you pass to register will be passed to the MariaDB pool builder.

Install

npm install fastify-mariadb --save

Usage

Add it to your project with register and you are done! This plugin will add the mariadb namespace in your Fastify instance, with the following properties:

pool: the pool instance
query: an utility to perform a query without a transaction
getConnection: get a connection from the pool

Example:

const fastify = require('fastify');

fastify.register(require('fastify-mariadb'), {
  host: 'localhost',
  user: 'root',
  database: 'mysql',
  connectionLimit: 5,
});

fastify.get('/user/:id', (req, reply) => {
  // `pool.getConnection` -> `conn.query` -> `conn.release`
  fastify.mariadb.getConnection((err, conn) => {
    if (err) return reply.send(err);
    conn.query('SELECT username FROM users WHERE id=?', [req.params.id], (err, result) => {
      client.release();
      reply.send(err || result);
    });
  });
});

fastify.get('/mariadb/time', (req, reply) => {
  // `pool.query`
  fastify.mariadb.query('SELECT now()', (err, result) => {
    reply.send(err || result)
  });
});

fastify.listen(3000, (err) => {
  if (err) throw err;
  console.log(`server listening on ${fastify.server.address().port}`);
});

As you can see there is no need to close the client, since is done internally.

Async await is supported, when register promise option is true:

const fastify = require('fastify');

fastify.register(require('fastify-mariadb'), {
  promise: true,
  connectionString: 'mariadb://root@localhost/mysql',
});

fastify.get('/user/:id', async (req, reply) => {
  const mariadb = fastify.mariadb;
  const connection = await mariadb.getConnection();
  const result = await mariadb.query('SELECT username FROM users WHERE id=?', [req.params.id]);
  connection.release();
  return result[0];
});

fastify.listen(3000, (err) => {
  if (err) throw err;
  console.log(`server listening on ${fastify.server.address().port}`);
});

options

Acknowledgements

Most of codes are copied from fastify-mysql.
MariaDB connector/Node.js most options are similar to mysql/mysql2 driver with more features and performant.

License

Licensed under MIT.

About

Fastify MariaDB connection Pool plugin

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •