17

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

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

4

2 回答 2

14

有一些解决方案,可通过 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 生成中间件。它完全可扩展以添加新的数据库系统和插件。”
于 2012-07-22T16:14:52.147 回答
13

更新

自从我发布了这个答案以来,我已经放弃了官方 MongoDB NodeJS 驱动程序的 mongoose,因为它非常直观并且更忠于 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生成器而不是回调。

截至 2015 年 6 月,我认为使用 Node.js/io.js的SQL 数据库的最佳ORM是支持以下数据库的Sequelize :

  • PostgreSQL
  • MySQL
  • 玛丽亚数据库
  • SQLite
  • 微软SQL

设置相当简单

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');

它还提供事务迁移和许多其他好东西。

于 2015-06-26T08:43:59.507 回答