Организация работы Node.js и базы данных MongoDB

В данном руководстве показано, как организовать взаимодействие Node.js и базы данных MongoDB; также статья охватывает базовое управление данными.

Для выполнения руководства понадобятся следующие компоненты:

  • виртуальный выделенный сервер Ubuntu 12.04 x32
  • система управления базами данных (СУБД) MongoDB v2.4.6
  • программная платформа Node.js v0.10.20
  • драйвер Node.js (драйвер для взаимодействия MongoDB и Node.js)

Кратко о MongoDB

MongoDB – это открытая документо-ориентированная система управления базами данных, которая обеспечивает высокую производительность, высокую доступность и простое масштабирование.

Примечание: пользователи, которые ранее не сталкивались с установкой и использованием MongoDB, могут найти полезную информацию в руководстве «Установка MongoDB на сервер Ubuntu 12.04».

Убедитесь, что процесс MongoDB запущен.

ps -ef | grep mongo

Результат выглядит примерно так:

mongodb   1307  1  0 02:27 ?        00:00:01 /usr/bin/mongod --config /etc/mongodb.conf

Если же процесс не запущен, выполните следующую команду в каталоге bin MongoDB:

mongod

С MongoDB поставляется консольный клиент, который можно запустить при помощи команды:

mongo

На экране появится примерно такой результат:

MongoDB shell version: 2.4.4
connecting to: test
Server has startup warnings:
Mon Oct  7 20:40:35.209 [initandlisten] Mon Oct  7 20:40:35.209 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
>

Чтобы получить список существующих баз данных, используйте команду:

show dbs

Чтобы узнать, как БД является текущей, используйте:

db

Для переключения между базами данных используется команда use, для просмотра таблиц БД – команда show collections.

Примечание: в MongoDB таблицы называются collections.

К примеру, чтобы перейти к базе данных по имени test и просмотреть ее содержимое, нужно запустить:

use test
show collections

Ниже приведен краткий список команд, которые можно использовать в консольном клиенте; чтобы получить полный список команд, наберите help.

show dbs                  #show database names
show collections          #show collections in current database
show users                # show users in current database
show profile              # show most recent system.profile entries with time >= 1ms
show logs                 # show the accessible logger names
show log [name]           # prints out the last segment of log in memory, 'global' is default
use <db_name>             #  set current database
db.foo.find()             # list objects in collection foo
db.foo.find( { a : 1 } )  #list objects in foo where a == 1
it                        #result of the last line evaluated; use to further iterate
exit                      #quit the mongo shell

Краткий обзор Node.js

Node.js – это разработанная в JavaScript программная платформа для простого построения быстрых и масштабируемых сетевых приложений. Node.js использует событийно-управляемую модель неблокируемого ввода-вывода. Эта легкая и продуктивная платформа идеально подходит для информационно ёмких приложений реального времени, работающих на распределенных устройствах.

Примечание: инструкции по установке Node.js можно найти в данном руководстве.

Убедитесь в том, что Node.js запущен:

node -v

Если Node.js запущен, на экране появится версия Node.js.

Драйвер Node.js

Это написанный на чистом JavaScript официальный драйвер Node.js для MongoDB, предоставляющий родной интерфейс Node.js.

Для установки драйвера используйте менеджер пакетов Node – npm:

npm install mongodb

Подключение MongoDB и Node.js. Управление данными

Теперь нужно написать код для подключения приложения Node.js к MongoDB. Данный раздел охватывает три процедуры: подключение, запись и чтение из базы данных.

Чтобы иметь возможность выполнить код, нужно создать новый файл по имени app.js. Затем откройте его в удобном текстовом редакторе и внесите следующий блок кода.

var MongoClient = require('mongodb').MongoClient
, format = require('util').format;
MongoClient.connect('mongodb://127.0.0.1:27017/test', function (err, db) {
if (err) {
throw err;
} else {
console.log("successfully connected to the database");
}
db.close();
});

Выполните файл app.js, набрав следующую команду:

node app.js

В результате на экране появится строка:

successfully connected to the database

Теперь добавьте код, который будет вносить данные в новую таблицу test_insert.

var MongoClient = require('mongodb').MongoClient
, format = require('util').format;
MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {
if(err) throw err;
var collection = db.collection('test_insert');
collection.insert({a:2}, function(err, docs) {
collection.count(function(err, count) {
console.log(format("count = %s", count));
db.close();
});
});
});

Затем добавьте блок кода, который поместит данные в БД.

var MongoClient = require('mongodb').MongoClient
, format = require('util').format;
MongoClient.connect('mongodb://127.0.0.1:27017/test', function(err, db) {
if(err) throw err;
var collection = db.collection('test_insert');
collection.insert({a:2}, function(err, docs) {
collection.count(function(err, count) {
console.log(format("count = %s", count));
});
});
// Locate all the entries using find
collection.find().toArray(function(err, results) {
console.dir(results);
// Let's close the db
db.close();
});
});

Готово! Теперь можно подключаться к БД, а также вносить и читать данные из базы данных MongoDB с помощью приложения Node.js.

Дополнительные ссылки

Tags: , , , ,

2 комментария

  • temyrrian says:

    ясно, понятно, просто. Спасибо, ребят

  • FitzgeraldFox says:

    Подскажите пожалуйста, в чём дело, у меня выдаётся ошибка:

    /media/fitzgeraldfox/SP PHD U3/Практика/nodetest/node_modules/mongodb/lib/mongo_client.js:225
    throw err
    ^
    MongoError: failed to connect to server [127.0.0.1:27017] on first connect
    at null. (/media/fitzgeraldfox/SP PHD U3/Практика/nodetest/node_modules/mongodb/node_modules/mongodb-core/lib/topologies/server.js:313:35)
    at emit (events.js:95:17)
    at null. (/media/fitzgeraldfox/SP PHD U3/Практика/nodetest/node_modules/mongodb/node_modules/mongodb-core/lib/connection/pool.js:260:12)
    at g (events.js:180:16)
    at emit (events.js:98:17)
    at Socket. (/media/fitzgeraldfox/SP PHD U3/Практика/nodetest/node_modules/mongodb/node_modules/mongodb-core/lib/connection/connection.js:162:49)
    at Socket.g (events.js:180:16)
    at Socket.emit (events.js:95:17)
    at net.js:441:14
    at process._tickCallback (node.js:458:13)

    вот app.js:

    var express = require('express');
    var path = require('path');
    var favicon = require('serve-favicon');
    var logger = require('morgan');
    var cookieParser = require('cookie-parser');
    var bodyParser = require('body-parser');

    var routes = require('./routes/index');
    var users = require('./routes/users');
    var MongoClient = require('mongodb').MongoClient
    , format = require('util').format;
    MongoClient.connect('mongodb://127.0.0.1:27017/test', function (err, db) {
    if (err) {
    throw err;
    } else {
    console.log("successfully connected to the database");
    }
    db.close();
    });
    var app = express();

    // view engine setup
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'jade');

    // uncomment after placing your favicon in /public
    //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
    app.use(logger('dev'));
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(cookieParser());
    app.use(express.static(path.join(__dirname, 'public')));

    app.use('/', routes);
    app.use('/users', users);

    // catch 404 and forward to error handler
    app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
    });

    // error handlers

    // development error handler
    // will print stacktrace
    if (app.get('env') === 'development') {
    app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
    message: err.message,
    error: err
    });
    });
    }

    // production error handler
    // no stacktraces leaked to user
    app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
    message: err.message,
    error: {}
    });
    });

    module.exports = app;

Добавить комментарий для temyrrian Отменить ответ