Adding the capability to connect databases to Express apps is just a matter of loading an appropriate Node.js driver for the database in your app. This document briefly explains how to add and use some of the most popular Node.js modules for database systems in your Express app:
These database drivers are among many that are available. For other options, search on the npm site.
Module: cassandra-driver
$ npm install cassandra-driver
var cassandra = require('cassandra-driver')
var client = new cassandra.Client({ contactPoints: ['localhost'] })
client.execute('select key from system.local', function (err, result) {
if (err) throw err
console.log(result.rows[0])
})
Module: couchnode
$ npm install couchbase
var couchbase = require('couchbase')
var bucket = (new couchbase.Cluster('http://localhost:8091')).openBucket('bucketName')
// add a document to a bucket
bucket.insert('document-key', { name: 'Matt', shoeSize: 13 }, function (err, result) {
if (err) {
console.log(err)
} else {
console.log(result)
}
})
// get all documents with shoe size 13
var n1ql = 'SELECT d.* FROM `bucketName` d WHERE shoeSize = $1'
var query = N1qlQuery.fromString(n1ql)
bucket.query(query, [13], function (err, result) {
if (err) {
console.log(err)
} else {
console.log(result)
}
})
Module: nano
$ npm install nano
var nano = require('nano')('http://localhost:5984')
nano.db.create('books')
var books = nano.db.use('books')
// Insert a book document in the books database
books.insert({ name: 'The Art of war' }, null, function (err, body) {
if (err) {
console.log(err)
} else {
console.log(body)
}
})
// Get a list of all books
books.list(function (err, body) {
if (err) {
console.log(err)
} else {
console.log(body.rows)
}
})
Module: levelup
$ npm install level levelup leveldown
var levelup = require('levelup')
var db = levelup('./mydb')
db.put('name', 'LevelUP', function (err) {
if (err) return console.log('Ooops!', err)
db.get('name', function (err, value) {
if (err) return console.log('Ooops!', err)
console.log('name=' + value)
})
})
Module: mysql
$ npm install mysql
var mysql = require('mysql')
var connection = mysql.createConnection({
host: 'localhost',
user: 'dbuser',
password: 's3kreee7',
database: 'my_db'
})
connection.connect()
connection.query('SELECT 1 + 1 AS solution', function (err, rows, fields) {
if (err) throw err
console.log('The solution is: ', rows[0].solution)
})
connection.end()
Module: mongodb
$ npm install mongodb
var MongoClient = require('mongodb').MongoClient
MongoClient.connect('mongodb://localhost:27017/animals', function (err, db) {
if (err) throw err
db.collection('mammals').find().toArray(function (err, result) {
if (err) throw err
console.log(result)
})
})
var MongoClient = require('mongodb').MongoClient
MongoClient.connect('mongodb://localhost:27017/animals', function (err, client) {
if (err) throw err
var db = client.db('animals')
db.collection('mammals').find().toArray(function (err, result) {
if (err) throw err
console.log(result)
})
})
If you want an object model driver for MongoDB, look at Mongoose.
Module: neo4j-driver
$ npm install neo4j-driver
var neo4j = require('neo4j-driver')
var driver = neo4j.driver('neo4j://localhost:7687', neo4j.auth.basic('neo4j', 'letmein'))
var session = driver.session()
session.readTransaction(function (tx) {
return tx.run('MATCH (n) RETURN count(n) AS count')
.then(function (res) {
console.log(res.records[0].get('count'))
})
.catch(function (error) {
console.log(error)
})
})
Module: oracledb
NOTE: See installation prerequisites.
$ npm install oracledb
const oracledb = require('oracledb')
const config = {
user: '<your db user>',
password: '<your db password>',
connectString: 'localhost:1521/orcl'
}
async function getEmployee (empId) {
let conn
try {
conn = await oracledb.getConnection(config)
const result = await conn.execute(
'select * from employees where employee_id = :id',
[empId]
)
console.log(result.rows[0])
} catch (err) {
console.log('Ouch!', err)
} finally {
if (conn) { // conn assignment worked, need to close
await conn.close()
}
}
}
getEmployee(101)
Module: pg-promise
$ npm install pg-promise
var pgp = require('pg-promise')(/* options */)
var db = pgp('postgres://username:password@host:port/database')
db.one('SELECT $1 AS value', 123)
.then(function (data) {
console.log('DATA:', data.value)
})
.catch(function (error) {
console.log('ERROR:', error)
})
Module: redis
$ npm install redis
var redis = require('redis')
var client = redis.createClient()
client.on('error', function (err) {
console.log('Error ' + err)
})
client.set('string key', 'string val', redis.print)
client.hset('hash key', 'hashtest 1', 'some value', redis.print)
client.hset(['hash key', 'hashtest 2', 'some other value'], redis.print)
client.hkeys('hash key', function (err, replies) {
console.log(replies.length + ' replies:')
replies.forEach(function (reply, i) {
console.log(' ' + i + ': ' + reply)
})
client.quit()
})
Module: tedious
$ npm install tedious
var Connection = require('tedious').Connection
var Request = require('tedious').Request
var config = {
server: 'localhost',
authentication: {
type: 'default',
options: {
userName: 'your_username', // update me
password: 'your_password' // update me
}
}
}
var connection = new Connection(config)
connection.on('connect', function (err) {
if (err) {
console.log(err)
} else {
executeStatement()
}
})
function executeStatement () {
request = new Request("select 123, 'hello world'", function (err, rowCount) {
if (err) {
console.log(err)
} else {
console.log(rowCount + ' rows')
}
connection.close()
})
request.on('row', function (columns) {
columns.forEach(function (column) {
if (column.value === null) {
console.log('NULL')
} else {
console.log(column.value)
}
})
})
connection.execSql(request)
}
Module: sqlite3
$ npm install sqlite3
var sqlite3 = require('sqlite3').verbose()
var db = new sqlite3.Database(':memory:')
db.serialize(function () {
db.run('CREATE TABLE lorem (info TEXT)')
var stmt = db.prepare('INSERT INTO lorem VALUES (?)')
for (var i = 0; i < 10; i++) {
stmt.run('Ipsum ' + i)
}
stmt.finalize()
db.each('SELECT rowid AS id, info FROM lorem', function (err, row) {
console.log(row.id + ': ' + row.info)
})
})
db.close()
Module: elasticsearch
$ npm install elasticsearch
var elasticsearch = require('elasticsearch')
var client = elasticsearch.Client({
host: 'localhost:9200'
})
client.search({
index: 'books',
type: 'book',
body: {
query: {
multi_match: {
query: 'express js',
fields: ['title', 'description']
}
}
}
}).then(function (response) {
var hits = response.hits.hits
}, function (error) {
console.trace(error.message)
})