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');
它还提供交易 , 迁移和许多其他的好东西。