Node.js数据库的抽象层

时间:2012-04-10 15:49:18

标签: node.js mongodb

我一直在寻找简单的数据库抽象实现,然后我找到了很棒的文章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"

获取数据库

这是正确的做法吗?还是有更好的解决方案?

2 个答案:

答案 0 :(得分:11)

有一些解决方案可通过NPM获得:

  • Node-DBI:“Node-DBI是一个SQL数据库抽象层库,受PHP Zend Framework Zend_Db API的启发。它通过Adapters类提供统一的函数来处理多个数据库引擎。此时,支持的引擎是mysql,mysql-libmysqlclient和sqlite3“。看起来已经暂停了开发。
  • Accessor:“数据库包装器,提供对数据库的轻松访问。”目前仅支持MySQL和MongoDB。
  • Activerecord:“用Coffeescript编写的ORM支持多个数据库系统(SQL,NoSQL甚至REST),以及ID生成中间件。它可以完全扩展到添加新的数据库系统和插件。”

答案 1 :(得分:9)

<强>更新

由于我已经发布了这个答案,我放弃了official MongoDB NodeJS Drivers的mongoose,因为它非常直观,更忠于NoSQL数据库的概念。

原始答案

我虽然可能是时候更新旧问题的答案了:

如果您想将MongoDB用作document-oriented databasemongoose是一个不错的选择并且易于使用(例如来自官方网站):

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生成器而不是回调。

截至2015年6月6日,我认为带有Node.js / io.js的 SQL数据库的最佳ORMSequelize,支持以下数据库:

  • 的PostgreSQL
  • MySQL的
  • MariaDB的
  • SQLite的
  • MSSQL

设置为fairly easy

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:pass@example.com:5432/dbname');

它还提供transactionsmigrations和许多其他好东西。