标签: pouchdb

如何从CouchDB复制到PouchDB?

我已经建立了一个本地CouchDB数据库,我想将它复制到PouchDB数据库,在localhost上运行的网页中使用JavaScript.

使用下面的代码我得到这个错误:

原产地http://localhost不被访问控制允许来源允许的.

随着http://从远程删除,我没有得到一个错误,但没有文档显示为复制.

从Chrome DevTools查看IndexedDB数据库,我可以看到数据库已经创建(但似乎没有文档).

在Chrome 29.0.1535.2金丝雀中运行.

我可以在本地执行此操作,还是需要设置远程CouchDB数据库并启用CORS(根据CouchDB文档)?

var REMOTE = 'http://127.0.0.1:5984/foo';
var LOCAL = 'idb://foo';

Pouch(LOCAL, function(error, pouchdb){
  if (error) {
    console.log("Error: ", error);
  } else {
    var db = pouchdb;
    Pouch.replicate(REMOTE, LOCAL, function (error, changes) {
      if (error) {
        console.log('Error: ', error);
      }
      else {
        console.log('Changes: ', changes);
        db.allDocs({include_docs: true}, function(error, docs) {
          console.log('Rows: ', docs.rows);
        });
    }});
  }
});
Run Code Online (Sandbox Code Playgroud)

couchdb pouchdb

7
推荐指数
1
解决办法
2975
查看次数

Flux waitFor()和异步操作,如何建模.

我正在使用pouchDB作为应用程序的本地数据库.我想从PouchDB查询结果并将其加载到React.js中.但是,即使我正在使用waitFor()方法,PouchDB查询的结果也会返回太晚.我想我不明白waitFor()的使用是否正确,也许有人可以对它有所了解.

我有两个商店,DbStore从数据库中检索数据.FileExplorerStore这个商店由我的react组件使用.

DbStore.dispatchToken = AppDispatcher.register(function (payload) {

    var action = payload.action;
    var folder = payload.action.folder
    switch (action.type) {

        case 'OPEN_FOLDER':    
            if (folder === 'start') {
                DbStore.init();
            }
            else {
                DbStore.createPath(folder);
            }
            DbStore.emitChange();
            break;
        default:
        // do nothing
    }


    return true;
});
Run Code Online (Sandbox Code Playgroud)

DbStore有一个函数LoadFiles,它将DB文件加载到_files数组中.为了便于说明,我复制了以下代码:

loadFiles: function (_path) {
            var fileNames = fs.readdirSync(_path);
            _files = [];


            fileNames.forEach(function (file) {
                console.log(file)
                db.query(function (doc) {
                    emit(doc.name);
                }, {key: "bower.json"}).then(function (res) {
                    _files.push(res.rows[0].key)
                });
            });

 }, 
Run Code Online (Sandbox Code Playgroud)

FileExplorerStore有一个从_files数组中检索文件的方法.然后在FileExplorerStore中我有一个getFiles()方法,它将检索这些文件.但是,此数组始终为空,因为此方法将在填充数组之前执行.

FileExplorerStore

FileExplorerStore.dispatchToken = AppDispatcher.register(function (payload) {

var action = …
Run Code Online (Sandbox Code Playgroud)

pouchdb reactjs reactjs-flux

7
推荐指数
1
解决办法
6753
查看次数

如何管理pouchdb和couchdb同步?

存储多个用户数据的最佳方法是每个用户每个数据库.我正在使用同样的方法.

我在服务器上有couchdb,移动应用程序有pouchdb.我通过在pouchdb和couchdb中为用户创建单独的数据库来维护每个用户数据.那.这意味着我在couchdb中有多个数据库,在pouchdb中有一个数据库.

通常在sqlbase数据库中,用户数据存储在不同的不同表中.

所以在nosql pouchdb中我正在为每个表创建文档.

我面临的实际问题是:

我在每个数据库中都有一个文档来存储用户的事务.

客户端事务在他/她脱机时以及当应用程序将事务同步到couchdb用户数据库到事务文档时存储在pouchdb中.

数据存储在交易文件中如下

{
  "_id":"transaction ",
  "_rev":"1-3e5e140d50bf6a4d873f0c0f3e3deb8c",
  "data":[
    {
      "transaction_id":"tran_1",
      "transaction_name":"approve item",
      "status":"Pending",
      "ResultMsg":""
    },
    {
      "transaction_id":"tran_2",
      "transaction_name":"approve item",
      "status":"Pending",
      "ResultMsg":""
    }]
}
Run Code Online (Sandbox Code Playgroud)

所有这些事务都在服务器端执行,结果在这些文档中更新.当执行任何新事务时,我将其存储在数据属性的事务文档中.

现在我在pouch和couchdb中有1个事务,两者都意味着两个都是同步的.

现在,当移动应用程序处于脱机状态时,它会执行存储在pouchdb事务文档中的脱机事务.

在服务器端,1个事务更新为成功.

现在当应用程序进入联机和同步执行时,我正在丢失我的服务器端更改,最后事务文档中的数据是客户端pouchdb.

在这里我丢失了服务器端数据.那么什么是好方法或如何解决它.

在此输入图像描述 在此输入图像描述

couchdb pouchdb

7
推荐指数
1
解决办法
2359
查看次数

根据PouchDB/CouchDB的文档用户访问控制

我希望使用PouchDB - CouchDB来保存我的Web应用程序的用户数据,但无法找到一种方法来控制每个用户的访问权限.我的数据库只包含使用用户ID作为密钥的文档.我知道有一些解决方案:

  1. 每个用户一个数据库 - 但是它需要监视新用户何时想要保存数据以创建新数据库,并且可能创建大量数据库;

  2. 客户端和CouchDB之间的代理 - 但是我不希望PouchDB同步整个数据库的更改,包括那些_all_docs,_revs_diff请求中的其他用户的文档.

pouchDB的用户访问控制是否有任何建议,用户群约为100万(仅活跃用户约1万)?

security couchdb access-control pouchdb

7
推荐指数
1
解决办法
1824
查看次数

是否可以将GraphQL与SQLite或PouchDB等脱机移动数据库一起使用

我在看Relay/GraphQL.看起来很适合与React一起使用,但我主要担心的是是否可以在离线模式下使用GraphQL.在我目前使用Ionic Framework(基于AngularJs)构建的混合应用程序中,我计划转移到React,Redux.在从服务器获取数据方面,Relay/GraphQL看起来很棒但是当用户离线时如何在移动设备上本地运行GraphQL实例?这是Relay/GraphQL的有效用例吗?截至今天,我使用PouchDB作为我的本地数据库.

relay cordova pouchdb reactjs graphql

7
推荐指数
1
解决办法
2659
查看次数

如何限制PouchDB修订或永久删除修订

我使用的是PouchDBwebsql适配器或科尔多瓦的应用程序(我使用SQLite的插件).

注意,这个数据库是完全本地的,我不需要它同步.

对于我的特定应用程序(数据库用于跟踪API调用),我可以多次更新同一文档.

在删除文档并压缩数据库之后,我的数据库仍在增长.

我在删除文档后尝试压缩,尽管它有所不同 - 仍然保存了修订版本的记录 - 所以我的数据库仍然无限增长.

如何阻止数据库无限增长?

删除(通过设置doc._deleted = true然后db.put(doc))和压缩似乎不起作用.

请参阅下面的一条记录,即使我删除它并压缩数据库,它仍会随着所有修订而继续增长:

{
  "id": "STATUS_TYPE_WEB_BROADCAST_RESULT_APICALL_5",
  "deleted": true,
  "rev_tree": [
    {
      "pos": 1,
      "ids": [
        "561567a6abccf9e25063be1cff906862",
        {
          "status": "missing"
        },
        [
          [
            "76a29a5ea586f54b86d9f7671fa0938a",
            {
              "status": "missing"
            },
            [
              [
                "00945a90f36790a6e25c3c8c99ecb008",
                {
                  "status": "missing",
                  "deleted": true
                },
                [
                  [
                    "1844208b140a98fe83ccf547f3da1516",
                    {
                      "status": "missing"
                    },
                    [
                      [
                        "dd56c4b8dfae01cf3eabfad3ea21bf84",
                        {
                          "status": "missing"
                        },
                        [
                          [
                            "9152aac8de2c87c2265cc34ef1e992a9",
                            {
                              "status": "missing",
                              "deleted": true
                            },
                            [ …
Run Code Online (Sandbox Code Playgroud)

database sqlite cordova pouchdb

7
推荐指数
1
解决办法
2399
查看次数

PouchDB身份验证触发CORS预检请求

以下代码(使用PouchDB身份验证插件)失败,因为它触发浏览器发送CORS预检请求,而CouchDB不支持OPTIONSHTTP方法.

var db = new PouchDB("http://localhost:5984/mydb");
db.login('username', 'password');
// assume the database URL and login info are valid
Run Code Online (Sandbox Code Playgroud)

这是错误(在Chrome中).请注意,Edge中也会出现此问题,但Firefox中不会出现此问题:

XMLHttpRequest无法加载http:// localhost:5984/_session.预检的响应具有无效的HTTP状态代码405

以下是Chrome为请求发送的标头(在Firefox中没有明显不同):

POST /_session HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 25
Accept: application/json
Origin: http://localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:8080/
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,es-419;q=0.6,es;q=0.4
Run Code Online (Sandbox Code Playgroud)

我已经通过add-cors-to-couchdbNode脚本启用了CORS .我尝试过的事情:

  • 在我的local.ini中手动添加OPTIONS方法[cors]
  • { ajax: { content_type: "text/plain" } }作为第三个参数传递给login

所以,我的问题是: …

javascript couchdb cors pouchdb preflight

7
推荐指数
1
解决办法
628
查看次数

每个用户db(pouchdb/couchdb)和共享数据 - 可行吗?

我有以下用例/应用程序:

一个TODO应用程序,用户可以:在TODO上CRUD(我正在使用pouchdb/couchdb同步).几乎基于Josh Morony的教程

现在我想添加用户"分享"(仅发布,没有"编辑"/放置)他们的TODO项目与其他用户的能力,他们将能够只查看(读取)那些(没有写访问等).

我正在考虑添加一个单独的数据库(我们称之为"共享TODO数据库"),我的服务器可以在其中编写,所有用户只能读取.因此,任何用户都可能在该只读数据库中执行.find(),而在此处发布时,仍然会在请求共享来自用户的TODO时由服务器进行管理.

这有一种已知的模式(方法)吗?有没有真正的应用程序/示例已经这样做了?

couchdb pouchdb

7
推荐指数
2
解决办法
1750
查看次数

父母和子女连接时系统冻结

我已经将Pouchdb与Electron一起使用,通过本地LAN连接两个系统并使用作为父级的单个数据库,另一个子系统将使用相同的pouchdb数据库.

使用express-pouch使子系统连接父pouchdb.

父系统中将运行后台同步,从couchDB到pouchDB.

连接正在按预期工作,问题将是在父系统和子级连接系统冻结一段时间之后.检查任务管理器磁盘100%,内存100%.

两个系统 - Windows 10专业版 - Ram - 4GB

couchdb pouchdb windows-10 electron

7
推荐指数
1
解决办法
148
查看次数

从移动应用程序进行pouchDB/couchDB复制的最佳实践

我在我的混合(Ionic)应用程序中使用pouchDB从我的Cloudant数据库发送和检索数据.

continuous replication到目前为止我已经习惯了,但是交易太多了,服务器的账单也在增加!

你能帮助我用"最佳实践"重写我的代码以避免这种情况吗?

这样声明远程URL是最好的实践,还是应该有数据库的本地副本?

如您所见,我是pouchDB/couchDB的新手,我不明白如何正确管理复制.

谢谢你的帮助!

.factory('usersDatabase', [
    'pouchDB',
    function (pouchDB) {
        'use strict';

        var usersDatabase = pouchDB('boaine_users'),
            remote = 'https://ididi:pwdpwd@myaccount.cloudant.com/boaine_users',
            opts = {
                live: true,
                retry: true
            };
        usersDatabase.replicate.to(remote, opts);
        usersDatabase.replicate.from(remote, opts);

        return usersDatabase;
    }
])
Run Code Online (Sandbox Code Playgroud)

mobile couchdb angularjs pouchdb ionic-framework

6
推荐指数
0
解决办法
599
查看次数