Абстрактный слой для базы данных Node.js

Я искал простую реализацию абстракции базы данных, тогда я нашел отличную статью http://howtonode.org/express-mongodb, старую, но мне все еще нравится идея.

Ну, может быть, конструкция, может взять какой-то объектный литерал с настройками базы данных. Таким образом, основная идея заключается в том, что могут быть разные реализации UserService-s, но найти их в разных каталогах и требовать только те, которые вам нужны.

/data-layer/mongodb/user-service.js
                   /post-service.js
                   /comment-service.js

/data-layer/couchdb/user-service.js
                   /post-service.js
                   /comment-service.js

Когда нужна база данных, я получу ее с помощью var UserService = require(__dirname + '/data-layer/mongodb/user-service).UserService(db);, где var db = "open db object"

Будет ли это правильным способом сделать это или есть ли лучшие решения?

Ответ 1

Существует несколько решений, доступных через NPM:

  • Node-DBI: "Node -DBI - это библиотека уровня абстракции базы данных SQL, сильно вдохновленная PHP Zend Framework Zend_Db API. Он предоставляет унифицированные функции для работы с несколькими ядрами баз данных с помощью классов адаптеров. В настоящее время поддерживаемые двигатели - это mysql, mysql-libmysqlclient и sqlite3". Похоже, что разработка была приостановлена.
  • Accessor: "Обертка базы данных обеспечивает легкий доступ к базам данных". В настоящий момент поддерживается только MySQL и MongoDB.
  • Activerecord: "ORM, написанный в Coffeescript, который поддерживает несколько систем баз данных (SQL, NoSQL и даже REST), а также ID поколения. Он полностью расширяется для добавления новых систем баз данных и плагинов".

Ответ 2

Обновление:

С тех пор как я опубликовал этот ответ, я отказался от мангуста для официальных драйверов MongoDB NodeJS, так как он очень интуитивно понятен и более лоялен к концепции баз данных NoSQL.

Оригинальный ответ:

Я подумал, что пришло время обновить ответ на старый вопрос:

Если вы хотите использовать MongoDB в качестве базы данных, ориентированной на документы, mongoose является хорошим выбором и простым в использовании (пример с официального сайта):

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

var Cat = mongoose.model('Cat', { name: String });

var kitty = new Cat({ name: 'Zildjian' });
kitty.save(function (err) {
  if (err) // ...
  console.log('meow');
});

Для довольно современного подхода Mongorito - хороший ODM, который использует генераторы ES6 вместо обратных вызовов.

По состоянию на 06.2015 я считаю, что лучшим ORM для баз данных SQL с Node.js/io.js является Sequelize, поддерживающий следующие базы данных:

  • PostgreSQL
  • MySQL
  • MariaDB
  • SQLite
  • MSSQL

Настройка довольно проста:

var sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql'
});

// Or you can simply use a connection uri
var sequelize = new Sequelize('postgres://user:[email protected]:5432/dbname');

Он также предоставляет транзакции, миграции и многие другие вкусности.