教 程 目 录
PouchDB教程
PouchDB是一个用JavaScript编写的开源浏览器内数据库API .它以CouchDB : 为模型;一个为npm提供动力的NoSQL数据库.使用此API,我们可以构建脱机和联机工作的应用程序. PouchDB在内部使用WebSQL和IndexedDB来存储数据.
本教程讨论了PouchDB的基础知识以及相关示例,以便于理解.
受众
本教程是为初学者准备的,旨在帮助他们理解PouchDB的基本概念.它将帮助您构建使用PouchDB和CouchDB在离线和在线工作的应用程序.
先决条件
读者应具备以下基本知识:数据库.最好对编程语言有一个很好的命令,它与node.js(如JavaScript和CoffeeScript)兼容.
本文地址:https://www.itbaoku.cn/tutorial/pouchdb-index.html
相关问答
我在应用程序内浏览器内有一个Cordova应用程序.每个用户属于"团队".对于每个团队,云中都有一个沙发数据库,它们都将本地袋同步. 我想创建一个提供一些简单过滤功能的设计文档,但是我担心该团队的任何用户都可以创建设计文档的新修订版,从而影响其他用户的视图文件. 锁定设计文档的更新是一种常见的做法吗?这些设计文档通常在用户之间复制,还是仅在本地袋中创建,并以某种方式阻止将其复制到共享的云沙发? ? 解决方案 我对人们的标准建议是从不复制设计文档.这太令人困惑和安全风险. 因此,当您复制时,您只需执行过滤器即可排除ID以_design/开头的任何文档.在客户端,您只需创建所需的任何DDOC,然后与服务器同上. 另一方面,这并不能阻止恶意用户尝试在服务器端覆盖设计文档. (如果您还使用服务器端DDOC.)防止它使用validate_doc_update函数的唯一方法,您可以使用它来防止非Admins覆盖设计文档. 希望有帮助!
)
我在应用程序启动时建立了同步(与事件侦听器),我需要停止它并再次运行.有一个.cancel()函数可行,但是如何重新启动同步? 我尝试删除cancel()之后返回的sync()函数并再次运行sync(),但有时会发出警告" pouchdb-6.1.2.2.min.js:7(node)警告:可能发生的EventEmitter内存泄漏.添加了11个侦听器.使用Emitter.SetMaxListeners()增加限制.".当我得到的时,我的旧听众不会被cancel()删除. 我如何停止并开始正确同步? 解决方案 我相信正确的方法是: var db = new PouchDB('local'); var remoteDb = new PouchDB('URL'); var sync = db.sync(remoteDb, {live: true}); 每当您要重新启动同步时,您都会调用以下函数: function restartSync() { sync.on('complete', () => { sync = db.sync(remoteDb, {live: true}); }); sync.cancel(); } 来源: .html#取消 - 复制
)
我是新来的, nosql 概念,所以当我开始学习 pouchdb ,我找到了此转换图.我的困惑是, pouchdb 如果说我有多个表,是否意味着我需要创建多个数据库?因为从我在pouchdb中的理解中,数据库可以存储大量文档,但是文档意味着在SQL中或我被误解了吗? 解决方案 ...这是否意味着我需要创建多个数据库? 否. ...一个文档是指SQL中的一行还是我误会了? 是的. SQL表定义列标题(名称和类型) - 是DOC的JSON属性名称 因此,所有具有相同属性的文档(行) (所谓的"架构")是SQL表的等效.您需要在一个数据库中使用尽可能多的模式(请访问json-schema.org获取灵感). 如何单独请求它们?创建CouchDB视图!您可以从SQL中知道的一个请求中获取所有表格数据的所有/一些"行"(具有相同架构的文档). 很容易编写此类视图,属性type对于couchdb文档来说非常常见.您从SQL表中的已知名称可以是您的类型,例如doc.type: "animal" 您的视图名称可能是animalByName或animalByWeight.取决于您的需求. 其他解决方案 这个问题的答案似乎令人惊讶地记录在案. @llabball显然给出了一个不错的答案,但我认为观点永远是必经之路. 您可以阅读在这里
)
我知道可以使用复杂键构建视图(基本上是一个数组). 但是,普通文件也支持吗?我想避免使用许多文档,因为手机上的性能可能会很慢.因此,我正在使用"使用和滥用您的钥匙"方法. 这就是为什么我需要复杂的键,以便我可以在这些密钥上使用startkey和endkey. 解决方案 是的,这是完全可能的.阅读基本上您要做的是使用 pouchdb colate 插件将复杂键序列化为字符串,然后将其用于_id.然后查找与query() api完全相同的工作,使用startkey,endkey,keys,无论您喜欢什么.
)
我目前正在使用pouchdb,我正在利用云端将我的DB在pouchdb中进行云. 我确实做了回调方法,它给了一个成功回调,但是,我在Cloudant上检查了我的数据库,创建了0个DOC,但是有8个更新seq. 我可以知道为什么吗?这是我使用的一组代码. function pouchdb() { var db = new PouchDB("todos"); var remoteDB = new PouchDB("http://example.cloudant.com/example"); var todo = { _id: "mittens1233", title: "hello", occupation: "kitten123" }; db.put(todo, function callback(err, result) { if (!err) console.log('Successfully posted a todo!'); }); db.put(doc); PouchDB.sync(db, remoteDB); } 我回来的结果是 Successfully posted a todo!
)
在客户端使用pouchdb访问远程服务器时,遵循的最佳安全实践是什么? https://pouchdb.com/getting-started.html 带代码的远程服务器: var remoteCouch = 'http://user:pass@mname.example.com/todos'; 问题是我可能不希望用户看到可以下载的文件的明文密码 - 即使仅向身份验证的用户显示该文件. 请建议.预先感谢, 解决方案 这是我有一个配置为使用http的couchdb的生产服务器,但外部请求需要通过 https https. Stunnel 到Couchdb. 在客户端,我使用pouchdb维护本地复制的DB.作为通过HTTPS与CouchDB建立通信的握手的一部分,该软件从另一台服务器中获取CouchDB凭据 - 凭据永远不会存储客户端. pouchdb-authentication 是一个很好的插件个人. 其他解决方案 每个站点用户都应拥有自己的CouchDB用户.如@Onno所建议的,请使用HTTPS和用户的登录凭据访问CouchDB.密码永远不应在客户端JavaScript中可用. 其他解决方案 这取决于您的远程服务器.如果使用CouchDB服务器,则可以将其配置为仅通过SSL(https)进行通信,请参见 docs 有
)