npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@fosenu/mysqlclient

v1.0.10

Published

MYSQL client, wrapper for mysql2

Downloads

15

Readme

@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