4.0.1 • Published 9 months ago

slim-node-postgres v4.0.1

Weekly downloads
-
License
ISC
Repository
github
Last release
9 months ago

Slim Node Postgres

Postgres database class to abstract pooling and prepared statements.

Another

Table of Contents

Installation

To install the package from npm run:

npm install slim-node-postgres

Download

Download the latest Slim Node Postgres package.

Example Setup

It is recommended that a single SlimNodePostgres instance is used throughout your app so it can effectively manage pooling.

const { SlimNodePostgres } = require('slim-node-postgres');

// create new database instance with the Postgres connection string
const database = new SlimNodePostgres(env.database);

Usage

If non-SELECT queries are executed, the resulting value will be of the type ExecuteResult containing the following properties:

interface ExecuteResult {
  affectedRows: number;
  changedRows: number;
}

Methods

query

// returns an array of rows found or an empty array if nothing is found
const data: User[] = await database.query<User>(
  `
  SELECT
      *
  FROM
      User
  WHERE
      id = @id
  `,
  {
    id: 1,
  }
);

execute

Used to run all non-SELECT queries.

Example update:

const result: ExecuteResult = await database.execute(
  `
    UPDATE User
    SET username = @username
    WHERE id = @id
  `,
  {
    id: 1,
    username: 'newUsername',
  }
);

console.log(result.affectedRows); // 1
console.log(result.changedRows); // 1

insert

A convenient method for inserting data by specifying the table, columns, and values.

Example insert:

const result: ExecuteResult = await database.insert(
  'User',
  ['id', 'username'],
  [3, 'newUsername']
);

console.log(result.affectedRows); // 1
console.log(result.insertId); // The ID of the newly inserted row
console.log(result.changedRows); // 0

getOne

// returns an object with data from the matched row or null if no match was found
const data: User | null = await database.getOne<User>(
  `
    SELECT
        *
    FROM
        User
    WHERE
        id = @id
    LIMIT 1
`,
  {
    id: 1,
  }
);

getValue

// returns value from column specified (generics are optional)
const username: string | null = await database.getValue<User, 'username'>(
  'username',
  `
    SELECT
        *
    FROM
        User
    WHERE
        id = @id
    LIMIT 1
`,
  {
    id: 1,
  }
);

exists

// returns a boolean value depending on if any rows are returned or not
const exists: boolean = await database.exists(
  `
    SELECT *
    FROM User
    WHERE id = @id
    LIMIT 1
`,
  {
    id: 1,
  }
);

console.log(exists); // true

Testing

Unit Tests

npm run test

Functional Tests

CONNECTION_STRING=<TEST DATABASE CONNECTION STRING> ./node_modules/.bin/jest functional-tests/**/*.test.ts --runInBand
4.0.1

9 months ago