by grncdr

grncdr / node-any-db

Thin and less-opinionated database abstraction layer for node.

210 Stars 30 Forks Last release: Not found MIT License 626 Commits 33 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:


Build Status

The less-opinionated Node.js database abstraction layer


Establish a connection:

// Takes an optional callback
var conn = anyDB.createConnection('driver://user:[email protected]/database')

Make queries:

var sql = 'SELECT * FROM questions'

// query() returns a readable stream conn.query(sql).on('data', function (row) {})

// pass a callback to collect results conn.query(sql, function (error, result) {})

Use bound parameters:

sql += ' WHERE answer = ?'
conn.query(sql, [42], function (err, res) {})

Manage database transactions with any-db-transaction:

var begin = require('any-db-transaction')

var tx = begin(conn) // Can also take a callback tx.on('error', function (err) {}) // Emitted for unhandled query errors tx.query(...) // same interface as connections, plus... tx.rollback() // this too tx.commit() // takes an optional callback for errors

Create a connection pool that maintains 2-20 connections:

var pool = anyDB.createPool(dbURL, {min: 2, max: 20})

pool.query(...) // perform a single query, same API as connection var tx = begin(pool) // create a transaction with the first available connection pool.close() // close the pool (call when your app should exit)


The purpose of this library is to provide a consistent API for the commonly used functionality of SQL database drivers, while avoiding altering driver behaviour as much as possible.


For Applications

npm install --save any-db-{postgres,mysql,sqlite3,mssql} any-db

All of the adapter libraries have

as a peerDependency, which means that you will have to install
as well.

For Libraries


in package.json. This allows users of your library to satisfy the any-db dependency by installing the adapter of their choice. If you need to run tests, list it as a


module.exports := {
  createConnection: (Url, Continuation?) => Connection
  createPool: (Url, PoolConfig) => ConnectionPool

Url := String | { adapter: String }

PoolConfig := { min: Number, max: Number, onConnect: (Connection, ((Error) => void) => void reset: (Connection, ((Error) => void) => void }

Continuation := (Maybe, Any) => void

The API of Connection and Query objects is fully described in the adapter-spec, while Transaction and ConnectionPool objects have their own documentation. Connections, transactions and pools all have a

method that behaves consistently between drivers.

Both exported functions require an

as their first parameter. This can either be a string of the form
adapter://user:[email protected]/database
(which will be parsed by parse-db-url) or an object. When an object is used, it must have an
property, and any other properties required by the specified adapters createConnection method.

See also: README for your chosen adapter (MS SQL, MySQL, Postgres, and SQLite3)



We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.