Need help with node-any-db?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

210 Stars 33 Forks MIT License 630 Commits 16 Opened issues


Thin and less-opinionated database abstraction layer for node.

Services available


Need anything else?

Contributors list


Build Status

The less-opinionated Node.js database abstraction layer


Any-DB is in maintenance mode and bug fixes will happen infrequently/never.* What this means for you depends on how you are using any-db:

  • If you need support for a fixed set of database engines: you should replace the dependency on any-db with the underlying database driver(s). Code adjustments should be minimal and you'll get access to all the modern features provided by the database drivers that any-db doesn't expose (such as promises).
  • If you need to support arbitrary runtime defined database connections: any-db is still functional, but has had to start restricting the driver versions it depends on. If you are interested in maintaining these packages feel free to contact me.
  • If you are using a library that depends on any-db: contact the author of that library and ask them to read this notice.

* Why? I haven't used any-db myself in nearly a decade and there are no other maintainers.


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.