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"。開発が一時停止されたようです。
  • アクセサー:「データベースラッパー。データベースへの簡単なアクセスを提供します。」現在、MySQLとMongoDBのみをサポートしています。
  • Activerecord:「複数のデータベースシステム(SQL、NoSQL、さらにはREST)とID生成ミドルウェアをサポートするCoffeescriptで記述されたORM。新しいデータベースシステムとプラグインを追加するために完全に拡張可能です。」
于 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は、コールバックの代わりにES6ジェネレーターを使用する優れた ODMです。

2015 年 6 月現在、 Node.js/io.js を使用したSQL データベースに最適なORMは、次のデータベースをサポートするSequelizeであると考えています。

  • PostgreSQL
  • MySQL
  • マリアDB
  • 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');

また、トランザクション移行、およびその他の多くの機能も提供します。

于 2015-06-26T08:43:59.507 に答える