Абстрактный слой для базы данных 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');
Он также предоставляет транзакции, миграции и многие другие вкусности.