CouchDB作为Cordova / Phonegap数据库

时间:2014-07-22 12:07:09

标签: cordova couchbase-lite

目标

我想构建一个带有cordova / phonegap的跨平台移动应用程序,它需要一个数据库(仅限客户端)。我的目标平台主要是AndroidiOS。我已选择couchbase-lite作为我的存储空间。

问题

但我在couchbase-lite中找不到phonegap的任何好文档。只有我在rest apiapplication todo-lite中找到了一些githubPlay Store

我无法理解,如果我没有任何服务器端实现,我怎么能得到 url 我可以发送 POST / GET / PUT / DELETE 请求。

任何人都可以建议我使用{{couchbase-liteAndroid本地iOS数据库中安装,连接和运行CRUD操作的方法1}} / cordova

为什么选择Couchbase-lite(对所有人来说并不重要)

对于那些建议我选择另​​一个数据库的人,我只是分享我的发现...
来自cordova 5.0 storage documentation有几个选择

  • LocalSorage: 5 MB限制不足以满足应用程序。
  • WebSQL :自从w3c放弃规划以来,我对它的未来感到害怕。
  • IndexDB :目前发展不足,不适用于Android和iOS。
  • 基于插件的选项:通过激励NoSQL的评估。我试过了phonegap。其中包含对Android和iOS平台的插件支持。

6 个答案:

答案 0 :(得分:5)

我一直在寻找这个,我想我终于找到了一些东西。事实证明,您需要使用同轴库与Couchbase Lite db进行通信。 Couchbase Lite插件只公开一个方法getURL,它返回Couchbase Lite的LOCAL内部URL。然后你必须使用coax来创建一个db对象并对它运行查询。

基本上看起来对Couchbaselite的访问都是通过使用内部形成的URL的REST查询。但这样做很痛苦,因此你需要使用同轴电缆。有了同轴电缆,似乎REST操作被公开为objects..put,del等上的函数。这里列出了对API的完整引用是很好的细节:

Here is the full spec of the REST operations for Couchbase Lite on mobile - your CRUD ops

Here is the Coax with simple instructions on how the rest queries work in the context of CouchDB

我在这里发现了一篇非常好的文章 - 它讨论了设置和所有CRUD操作。

Couchase Lite in Cordova via Coax

希望这能帮到你......

答案 1 :(得分:3)

另一个建议可能是PouchDB和CouchDB。

您可以将CouchDB直接同步到PouchDB,并且它足够聪明,可以使用设备上可用的任何存储,即Localstorage,IDB,WebSQL。

如果您不想完全复制,那么您可以构建一些中间件来控制从CouchDB复制到PouchDB的内容(您可以指定从哪个文件复制数据库)

api非常简单,文档全部在网站上。

http://pouchdb.com/

答案 2 :(得分:2)

您可以使用Phonegap Cordova SQLite Plugin支持iOS以及Android

编码中没有语法差异只有差异

    db = window.openDatabase("DBNAME", "1.0", "Description", 200000); // WebSQL

    db = window.sqlitePlugin.openDatabase("DBNAME", "1.0", "Description", 200000); // SQLite Plugin
    db.transaction(function(tx){
    tx.executeSql("CREATE TABLE demo(id INTEGER,name TEXT)");
    });

新版Android / iOS设备的存储空间不受限制

答案 3 :(得分:2)

您要查找的代码位于函数setupConfig中的todo-lite phonegap应用程序中。你需要来自todolite-phonegap app的modules.js,zepto.min.js和zepto.touch.js文件。

//check if couchbase lite plugin is installed
if (!window.cblite) { return alert( 'Couchbase Lite not installed' ) }

//get your local url from the plugin
cblite.getURL( function(err, url) {
    console.log( "getURL: " + JSON.stringify( [ err, url ] ) )
    if (err) { return alert( JSON.stringfiy( err ) ) }

    var xmlHttp = new XMLHttpRequest()
    xmlHttp.open( 'GET', url, false )
    xmlHttp.send( null )

    window.server = coax( url );

    var db = coax( [ url, appDbName ] );

    setupDb( db, function(err, info) {
        if (err) { return alert( JSON.stringify( err ) ) } 

        // now your db connection is setup you do CRUD operations by

        //GET
        db.get( "myDocumentID", function (error, doc) { 
            if( error ) {
                if( error.status == 404 ) {
                    //INSERT
                    var myDocument = { "key" : "value" };
                    db.put( "myDocumentID", myDocument, function( error, ok ) {
                        if (error) { return alert( JSON.stringify( error ) }
                        //success
                    } );
                } else { return alert(JSON.stringify( error) ) }
            } else {
                //UPDATE
                doc.my_key = "value";
                //DELETE
                doc._deleted = true;
                db.put("myDocumentID", doc, function(error, ok) {
                     if (error) { return alert( JSON.stringify( error ) }
                     //success
                } );
            }
        } );
    } );
} );

function setupDb(db, cb) {
    db.get( function(err, res, body) {
        db.put( function(err, res, body) {
            db.get( cb )
        } )
    } )
}

答案 4 :(得分:1)

我意识到这有点晚了但你可以在Couchbase网站上找到一个很好的视频(你必须交出你的电子邮件等,但它相当轻松)。 @LorinBeer在大约15分钟内完成在手机差距应用程序中设置本地数据存储(从大约15:00开始)。

Using PhoneGap and Couchbase Lite to Create Data-Intensive Applications

还有一个演示回购,ANOTER

答案 5 :(得分:0)

在您提问的application todo-lite链接中,它会向您展示如何使用couch-DB数据库 他们提供了index.js文件的链接,其中包含couch-db lite的实现(操作方法)细节。
我想你可能错过了链接。您可以查看 index.js 文件以获取实现详细信息。