2012-04-10 79 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