@fosenu/mysqlclient
TypeScript icon, indicating that this package has built-in type declarations

1.0.10 • Public • Published

@fosenu/mysqlclient

MYSQL client, wrapper for mysql2. The library creates a pool connection to a MYSQL-server, and exports common functions for querying and running transactions.

Installation

Install the client by running:

npm install @fosenu/mysqlclient

Usage

Connection

Connect to a MYSQL-server:

import {Client} from '@fosenu/mysqlclient';

const mysqlClient = new Client({
    host: 'localhost',
    user: 'root',
    password: 'root_password',
    database: 'my_db'
});

The constructor also takes other connection arguments, listed here here. host, user, password and database are all required connection arguments.

Run queries

Running queries from a single connection:

const mysqlClient = ... // From previous example
const query = await mysqlClient.query();
const myResult = await query.execute<{id: number, name: string}>('SELECT id, name from myTable');
query.release(); // NOTE: Important to relase connection after use!

/**
 * Example result
 * myResult: {id: 1, name: 'hello world'}
 */

Instead of just running a single query, a connection can be used to run multiple queries as well, before releasing the connection:

const result1 = await query.execute<{id: number, name: string}>('SELECT id, name from myTable');
const resultN = await query.execute<{id: number, name: string}>('SELECT id, name from myTable');
query.release();

If a connection won't be released, the number of max connections may eventually be reached, and you're not able to create new connections against the database.

When you only want to run a single query, and not reuse an existing connection, use the .execute() method instead, which releases a connection automatically:

const result = await mysqlClient.execute<{id: number, name: string}>('SELECT id, name from myTable');

Pass arguments

When user-provided arguments needs to be passed to a sql-query, it is important to escape the user-input to prevent sql-injection:

await mysqlClient.execute<{id: number, name: string}>('SELECT id, name from myTable WHERE id = ?', [myArgument]);
await mysqlClient.execute<{id: number, name: string}>(`SELECT id, name from myTable WHERE id = ${Client.escape(myArgument)}`);

Transaction

Sometimes we need to run queries in a transaction, to make sure changes are only submitted, if all changes succeeds:

const transaction = await mysqlClient.transaction();
transaction.execute(sqlQuery, args);
...
transaction.execute(sqlQueryN, argsN);
transaction.commit();

To write changes to database, end a transaction using .commit(). If a commit fails somehow, or you don't want to write changes to the database, use the .rollback() function:

const transaction = await mysqlClient.transaction();
transaction.execute(sqlQuery, args);
...
transaction.execute(sqlQueryN, argsN);
transaction.rollback();

The sql-queries passed to the transaction will then be reverted, and the database will be in a state as before acquiring the transaction object.

Forgetting to use either commit() or rollback() will keep the connection in an open state.

License

© Fosen Utvikling AS, 2018. Licensed under a MIT license

Readme

Keywords

none

Package Sidebar

Install

npm i @fosenu/mysqlclient

Weekly Downloads

11

Version

1.0.10

License

MIT

Unpacked Size

17 kB

Total Files

18

Last publish

Collaborators

  • jonaskirkemyr