Организация работы 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.
Дополнительные ссылки
- http://www.nodejs.org/
- http://www.mongodb.org/
- http://docs.mongodb.org/ecosystem/drivers/node-js/
- https://www.npmjs.com/
2 комментария
ясно, понятно, просто. Спасибо, ребят
Подскажите пожалуйста, в чём дело, у меня выдаётся ошибка:
/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;