日期:2019 年 11 月 25 日
pouchDB 入门
什么是 pouchDB
PouchDB是一个受Apache CouchDB启发的开源JavaScript数据库,旨在在浏览器中良好运行
PouchDB的创建是为了帮助Web开发人员构建脱机工作以及在线工作的应用程序
pouchDB 的特点
它使应用程序可以在脱机时在本地存储数据,然后在应用程序重新联机时将其与CouchDB和兼容的服务器同步,从而使用户的数据无论在下次登录时都保持同步
pouchDB 的基础用法
下载
1、快速使用
<script src="//cdn.jsdelivr.net/npm/pouchdb@7.1.1/dist/pouchdb.min.js"></script><script>
var db = new PouchDB('my_database');
</script>
2、直接下载
3、npm
npm install --save pouchdb
安装后,通过 require()使用它:
var PouchDB = require('pouchdb');
var db = new PouchDB('my_database');
4、仅在浏览器中使用
如果仅在浏览器中使用PouchDB,则可以pouchdb-browser缩短安装时间:
npm install --save pouchdb-browser
var PouchDB = require('pouchdb-browser');
var db = new PouchDB('my_database');
API
PouchDB有一个异步API,支持回调,promise和 async函数
大部分API的用法如下:
db.doSomething(args..., [options], [callback])
… options和callback都是可选的
1、建立数据库
new PouchDB([name], [options])
此方法创建数据库或打开现有数据库。如果您使用类似URL 'http://domain.com/dbname',则PouchDB将作为在线CouchDB实例的客户端。否则,它将使用存在的任何后端创建本地数据库
参数:
name:您可以省略name参数,而是通过指定它options。请注意,名称是必需的
本地数据库的选项:
- auto_compaction:这将打开自动压缩,这意味着compact()在每次更改数据库后都会调用它。默认为false
- adapter:其一'idb','leveldb'或'http'
- revs_limit:指定我们要跟踪的旧修订版本(而非副本)。指定一个较低的值意味着Pouch可能无法确定通过复制收到的新修订是否与当前拥有的任何修订相关,这可能会导致冲突。默认为1000
- deterministic_revs:使用md5哈希值创建文档的确定性修订号。将其设置为false意味着修订号将是随机的UUID,默认为true
远程数据库的选项:
- fetch(url, opts):拦截或覆盖HTTP请求,您可以添加或修改与http请求相关的任何标头或选项,然后返回新的获取Promise
- auth.username+ auth.password:您可以通过使用名称形式的数据库http://user:pass@host/name或通过auth.username+ auth.password选项来指定HTTP身份验证参数
- skip_setup:最初,PouchDB检查数据库是否存在,并尝试创建数据库(如果尚不存在)。设置此选项可true跳过此设置
注意:
- 在IndexedDB中,PouchDB将使用pouch内部数据库名称作为前缀。不要手动创建具有相同前缀的数据库
- 当在Node上充当客户端时,给定的任何其他选项都将传递给request
- 使用'leveldb'适配器(Node上的默认设置)时,给定的任何其他选项将传递给levelup
用例:
var db = new PouchDB('dbname');
// or
var db = new PouchDB('http://localhost:5984/dbname');
必须先安装pouchdb-adapter-memory)
var db = new PouchDB('dbname', {adapter: 'memory'});
创建具有特殊提取选项的远程PouchDB
var db = new PouchDB('http://example.com/dbname', {
fetch: function (url, opts) {
opts.headers.set('X-Some-Special-Header', 'foo');
return PouchDB.fetch(url, opts);
}
});
2、删除数据库
db.destroy([options], [callback])
删除数据库。请注意,这对其他复制的数据库没有影响
用例
db.destroy().then(function (response) {
// success
}).catch(function (err) {
console.log(err);
});
示例响应
{
"ok" : true
}
3、更新数据库
使用db.put()
db.put(doc, [options], [callback])
创建一个新文档或更新一个现有文档。如果文档已经存在,则必须指定其修订版本_rev,否则会发生冲突
如果即使有冲突也要更新现有文档,则应指定基本修订_rev和使用force=true选项,然后将创建一个新的冲突修订
doc必须是“纯JSON对象”,即名称/值对的集合。如果您尝试存储非JSON数据(例如Date对象),则可能会看到不一致的结果
用法示例:
创建一个新文档_id的'mydoc':
db.put({
_id: 'mydoc',
title: 'Heroes'
}).then(function (response) {
// handle response
}).catch(function (err) {
console.log(err);
});
您可以使用来更新现有文档_rev:
db.get('mydoc').then(function(doc) {
return db.put({
_id: 'mydoc',
_rev: doc._rev,
title: "Let's Dance"
});
}).then(function(response) {
// handle response
}).catch(function (err) {
console.log(err);
});
示例响应:
{
"ok": true,
"id": "mydoc",
"rev": "1-A6157A5EA545C99B00FF904EEF05FD9F"
}
4、获取数据
db.get(docId, [options], [callback])
检索由指定的文档docId
参数:
除非另有说明,否则所有选项默认为
- options.rev:获取文档的特定修订版,默认为获胜修订版(请参阅CouchDB指南)options.revs:包括文档的修订历史记录
- options.revs_info:包括该文档的修订列表及其可用性
- options.open_revs:如果要获取所有叶修订,open_revs="all"或者获取open_revs数组中指定的所有叶修订,叶子将按照输入数组中指定的顺序返回
- options.conflicts:如果指定,则冲突的叶子修订版将附加在_conflicts数组中
- options.attachments:包括附件数据
- options.binary:以Blobs / Buffers的形式返回附件数据,而不是以base64编码的字符串形式返回
- options.latest:无论要求什么版本,都强制检索最新的“叶子”修订,默认值为false
用例
db.get('mydoc').then(function (doc) {
// handle doc
}).catch(function (err) {
console.log(err);
});
示例响应:
{
"_id": "mydoc",
"_rev": "1-A6157A5EA545C99B00FF904EEF05FD9F"
"title": "Rock and Roll Heart",
}
5、删除数据
db.remove(doc, [options], [callback])
或者
db.remove(docId, docRev, [options], [callback])
删除文件,doc必须是至少具有_id和_rev属性的文档
用法示例:
db.get('mydoc').then(function(doc) {
return db.remove(doc);
}).then(function (result) {
// handle result
}).catch(function (err) {
console.log(err);
});
示例响应:
{
"ok": true,
"id": "mydoc",
"rev": "2-9AF304BE281790604D1D8A4B0F4C9ADB"
}
更多用法参阅官方文档,不过都是英文的,很难读 _
网友评论