Перейти к содержанию

Интеграция с базами данных

Подключение баз данных к Express-приложению обычно сводится к загрузке подходящего Node.js-драйвера нужной СУБД. В этом документе кратко показано, как добавить и использовать некоторые популярные Node.js-модули для работы с базами данных в Express.

Это лишь часть доступных драйверов баз данных. Другие варианты ищите на npm.

Cassandra

Модуль: cassandra-driver

Установка

1
$ npm install cassandra-driver

Пример

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const cassandra = require('cassandra-driver');
const client = new cassandra.Client({
    contactPoints: ['localhost'],
});

client.execute(
    'select key from system.local',
    (err, result) => {
        if (err) throw err;
        console.log(result.rows[0]);
    }
);

Couchbase

Модуль: couchnode

Установка

1
$ npm install couchbase

Пример

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const couchbase = require('couchbase');
const bucket = new couchbase.Cluster(
    'http://localhost:8091'
).openBucket('bucketName');

// add a document to a bucket
bucket.insert(
    'document-key',
    { name: 'Matt', shoeSize: 13 },
    (err, result) => {
        if (err) {
            console.log(err);
        } else {
            console.log(result);
        }
    }
);

// get all documents with shoe size 13
const n1ql =
    'SELECT d.* FROM `bucketName` d WHERE shoeSize = $1';
const query = N1qlQuery.fromString(n1ql);
bucket.query(query, [13], (err, result) => {
    if (err) {
        console.log(err);
    } else {
        console.log(result);
    }
});

CouchDB

Модуль: nano

Установка

1
$ npm install nano

Пример

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
const nano = require('nano')('http://localhost:5984');
nano.db.create('books');
const books = nano.db.use('books');

// Insert a book document in the books database
books.insert(
    { name: 'The Art of war' },
    null,
    (err, body) => {
        if (err) {
            console.log(err);
        } else {
            console.log(body);
        }
    }
);

// Get a list of all books
books.list((err, body) => {
    if (err) {
        console.log(err);
    } else {
        console.log(body.rows);
    }
});

LevelDB

Модуль: levelup

Установка

1
$ npm install level levelup leveldown

Пример

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const levelup = require('levelup');
const db = levelup('./mydb');

db.put('name', 'LevelUP', (err) => {
    if (err) return console.log('Ooops!', err);

    db.get('name', (err, value) => {
        if (err) return console.log('Ooops!', err);

        console.log(`name=${value}`);
    });
});

MySQL

Модуль: mysql

Установка

1
$ npm install mysql

Пример

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
const mysql = require('mysql');
const connection = mysql.createConnection({
    host: 'localhost',
    user: 'dbuser',
    password: 's3kreee7',
    database: 'my_db',
});

connection.connect();

connection.query(
    'SELECT 1 + 1 AS solution',
    (err, rows, fields) => {
        if (err) throw err;

        console.log('The solution is: ', rows[0].solution);
    }
);

connection.end();

MongoDB

Модуль: mongodb

Установка

1
$ npm install mongodb

Пример (v2)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
const MongoClient = require('mongodb').MongoClient;

MongoClient.connect(
    'mongodb://localhost:27017/animals',
    (err, db) => {
        if (err) throw err;

        db.collection('mammals')
            .find()
            .toArray((err, result) => {
                if (err) throw err;

                console.log(result);
            });
    }
);

Пример (v3)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
const MongoClient = require('mongodb').MongoClient;

MongoClient.connect(
    'mongodb://localhost:27017/animals',
    (err, client) => {
        if (err) throw err;

        const db = client.db('animals');

        db.collection('mammals')
            .find()
            .toArray((err, result) => {
                if (err) throw err;

                console.log(result);
            });
    }
);

Если вам нужен объектный драйвер-модель для MongoDB, обратите внимание на Mongoose.

Neo4j

Модуль: neo4j-driver

Установка

1
$ npm install neo4j-driver

Пример

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
const neo4j = require('neo4j-driver');
const driver = neo4j.driver(
    'neo4j://localhost:7687',
    neo4j.auth.basic('neo4j', 'letmein')
);

const session = driver.session();

session.readTransaction((tx) => {
    return tx
        .run('MATCH (n) RETURN count(n) AS count')
        .then((res) => {
            console.log(res.records[0].get('count'));
        })
        .catch((error) => {
            console.log(error);
        });
});

Oracle

Модуль: oracledb

Установка

ПРИМЕЧАНИЕ: See installation prerequisites.

1
$ npm install oracledb

Пример

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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);

PostgreSQL

Модуль: pg-promise

Установка

1
$ npm install pg-promise

Пример

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
const pgp = require('pg-promise')(/* options */);
const db = pgp(
    'postgres://username:password@host:port/database'
);

db.one('SELECT $1 AS value', 123)
    .then((data) => {
        console.log('DATA:', data.value);
    })
    .catch((error) => {
        console.log('ERROR:', error);
    });

Redis

Модуль: redis

Установка

1
$ npm install redis

Пример

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const redis = require('redis');
const client = redis.createClient();

client.on('error', (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', (err, replies) => {
    console.log(`${replies.length} replies:`);

    replies.forEach((reply, i) => {
        console.log(`    ${i}: ${reply}`);
    });

    client.quit();
});

SQL Server

Модуль: tedious

Установка

1
$ npm install tedious

Пример

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
const Connection = require('tedious').Connection;
const Request = require('tedious').Request;

const config = {
    server: 'localhost',
    authentication: {
        type: 'default',
        options: {
            userName: 'your_username', // update me
            password: 'your_password', // update me
        },
    },
};

const connection = new Connection(config);

connection.on('connect', (err) => {
    if (err) {
        console.log(err);
    } else {
        executeStatement();
    }
});

function executeStatement() {
    request = new Request(
        "select 123, 'hello world'",
        (err, rowCount) => {
            if (err) {
                console.log(err);
            } else {
                console.log(`${rowCount} rows`);
            }
            connection.close();
        }
    );

    request.on('row', (columns) => {
        columns.forEach((column) => {
            if (column.value === null) {
                console.log('NULL');
            } else {
                console.log(column.value);
            }
        });
    });

    connection.execSql(request);
}

SQLite

Модуль: sqlite3

Установка

1
$ npm install sqlite3

Пример

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database(':memory:');

db.serialize(() => {
    db.run('CREATE TABLE lorem (info TEXT)');
    const stmt = db.prepare('INSERT INTO lorem VALUES (?)');

    for (let i = 0; i < 10; i++) {
        stmt.run(`Ipsum ${i}`);
    }

    stmt.finalize();

    db.each(
        'SELECT rowid AS id, info FROM lorem',
        (err, row) => {
            console.log(`${row.id}: ${row.info}`);
        }
    );
});

db.close();

Elasticsearch

Модуль: elasticsearch

Установка

1
$ npm install elasticsearch

Пример

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
const elasticsearch = require('elasticsearch');
const client = elasticsearch.Client({
    host: 'localhost:9200',
});

client
    .search({
        index: 'books',
        type: 'book',
        body: {
            query: {
                multi_match: {
                    query: 'express js',
                    fields: ['title', 'description'],
                },
            },
        },
    })
    .then(
        (response) => {
            const hits = response.hits.hits;
        },
        (error) => {
            console.trace(error.message);
        }
    );

Комментарии