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"

这是做这件事的正确方法,还是有更好的解决办法?

有几个解决scheme可以通过NPM获得:

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

我可能是时候更新一个老问题的答案了:

如果你想使用MongoDB作为你的面向文件的数据库 , mongoose是一个不错的select和易于使用(例如从官方网站):

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

截至2015年6月,我认为对于具有Node.js / io.js的SQL数据库来说,最好的ORM是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:pass@example.com:5432/dbname'); 

它还提供交易 , 迁移和许多其他的好东西。