1. 程式人生 > 實用技巧 >PouchDB基礎系列(一)

PouchDB基礎系列(一)

寫在前面:

  公司的一個專案是用到PouchDB,這是我第一次接觸這個庫,為了上手專案,所以對PouchDB的基礎進行了學習,這個系列是簡單記錄PouchDB的常用API。

什麼是PouchDB?

  上圖是官網對PouchDB的介紹,大概而言:PouchDB是一個瀏覽器資料庫,開發者可以通過PouchDB在本地儲存資料,並且這些資料的在離線的情況也可以使用,同時,PouchDB可以在Node.js中執行。最後,PouchDB是使用JavaScript編寫的開源專案。

  此外,PouchDB是受Apache CouchDB所啟發,當其執行在瀏覽器或者Node.js時,應用程式在聯機時將與CouchDB伺服器或者相容伺服器進行同步

一、安裝PouchDB與使用

1、安裝下載

 (1)從官網下載PouchDB或者通過CDN服務:https://pouchdb.com/download.html

  注:在生產環境建議下載壓縮版,在開發環境下載未壓縮版,以供開發人員進行除錯

 (2)通過npm下載

npm install --save pouchdb

  同時,官網也提供了另外一個操作,假如僅在瀏覽器使用PouchDB,則可以使用下面的npm命令

npm install --save pouchdb-browser

2、使用

  如果是通過第一種方法下載,在html檔案引入js檔案,並且在script標籤中就可以使用PouchDB

<script src="//cdn.jsdelivr.net/npm/[email protected]/dist/pouchdb.min.js"></script>
<script>
  var db = new PouchDB('my_database');
</script>

  注:上面是通過CDN服務進行使用

  通過npm包下載使用方法,在需要使用的頁面中進行require應用

var PouchDB = require('pouchdb');
var db = new PouchDB('my_database');

二、關於PouchDB的API

API概述

  PouchDB是具有非同步API,支援callback回撥,Promises以及非同步功能,官網建議是使用Promise,我個人也是建議使用Promise,在現在的前端開發中,Promise常見的解決非同步操作的解決方法。同時,大部分的API格式

db.doSomething(args..., [options], [callback])

  其中,options配置項以及callback回撥是可選的

Callbacks

  Callbacks使用標準Node.js的寫法

function(error,result){
    /*
        ...
        ...
    */
}    

  當沒有錯誤的時候,undefined將作為error的值

Promises

  當沒有指定使用Callbacks時,則認API會預設返回Promise物件。

  假如要對PouchDB使用自定義的Promise,則必須在載入PouchDB之前先重新定義全域性的Promise物件

<script>window.Promise = MyCustomPromiseLibrary;</script>
<script src="path/to/pouchdb.js"></script>

  在上述程式碼中,MyCustomPromiseLibrary為我自行定義的Promise,則我必須在scrpit指令碼載入PouchDB前覆蓋掉全域性的Promise

Async function

  可以在PouchDB使用基於Promise的async/await關鍵字,當然前提是專案是支援ES 7的或者使用了Babel這樣的轉譯工具

async function myFunction(){
    /*
        ...
        ...
    */
}    

三、PouchDB常見的API

Create a database 建立資料庫

new PouchDB([name], [options])

  這個操作會建立一個新的資料庫或者開啟已有的資料庫,如果name的值為一個URL時,如“http://domain.com/dbname”,則此時PouchDB將充當遠端的CouchDB例項的資料庫,否則此時將使用已存在的後端語言來建立本地資料庫

  配置項

    name:name是必需的。

    options:

      本地資料庫的options: