2012-04-10 106 views
11

我一直在尋找簡單的數據庫抽象實現,然後我發現偉大的文章http://howtonode.org/express-mongodb,這雖舊,但我仍然喜歡這個想法。Node.js數據庫的抽象層

那麼也許這個構造,可以採取某種對象字面值與數據庫設置。 所以主要的想法是可以有不同的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"

請問這是正確的方式做到這一點,還是有什麼更好的辦法呢?

+1

很有前途的是JugglingDB:https://github.com/1602/jugglingdb這裏的文檔:http:// jsdoc。info/1602/jugglingdb/ – 2013-03-18 05:19:24

+0

你可能會發現這是一個獲得創意的好地方http://mongodb.github.com/node-mongodb-native/github/github.html – christkv 2012-04-18 19:28:14

+1

查看[JSData](http:// www的.js-data.io /)。 – orad 2016-02-08 20:38:46

回答

11

有幾個解決方案,可通過NPM:

  • Node-DBI:「節點DBI是一個SQL數據庫抽象層庫,由PHP Zend框架Zend_Db的API強烈的啓發,提供統一的職能工作。有多個數據庫引擎,通過Adapters類。此時,支持的引擎是mysql,mysql-libmysqlclient和sqlite3「。看起來發展已經暫停。
  • Accessor:「一個數據庫封裝器,提供對數據庫的簡單訪問。」目前僅支持MySQL和MongoDB。 「使用Coffeescript編寫的支持多種數據庫系統(SQL,NoSQL,甚至是REST)的ORM以及ID生成中間件,可以完全擴展添加新的數據庫系統和插件。」
7

我雖然它可能是時間來更新一個老問題的答案:

如果你想使用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是使用ES6發電機的回調,而不是一個很好的ODM。

由於06.2015我認爲,對於SQL數據庫使用的是Node.js/io.js最好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:[email protected]:5432/dbname'); 

它還提供transactionsmigrations和許多其他東西。

+1

對於基於SQL的數據庫是正確的Sequelize ORM是一個很好的選擇。 – 2015-06-26 09:41:02

+0

@RistoNovik好點!將更新答案:) – 2015-06-26 09:45:16

+0

感謝您建議sequelize,這是真棒:) – kabirbaidhya 2016-05-20 05:12:16