### Install and run PouchDB Server
Source: https://github.com/apache/pouchdb/blob/master/docs/guides/setup-couchdb.md
Install PouchDB Server globally using npm and start it. This is an experimental alternative to CouchDB.
```bash
$ npm install -g pouchdb-server
$ pouchdb-server --port 5984
```
--------------------------------
### Run Site Locally
Source: https://github.com/apache/pouchdb/blob/master/docs/WEBSITE_README.md
Install dependencies and build the site to run the development server locally. This command starts a server that watches for file changes.
```sh
$ npm i
$ npm run build-site
```
--------------------------------
### Explain Index with Callback
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/explain_index.html
Example of using the explain index API with a traditional callback function. Ensure the pouchdb-find plugin is installed.
```javascript
db.explain({ selector: { name: 'Mario', series: "mario" }, fields: ['_id', 'name'], sort: ['name'] }, function (err, explanation) {
if (err) {
return console.log(err);
}
// view explanation
});
```
--------------------------------
### Check PouchDB setup with `info()`
Source: https://github.com/apache/pouchdb/blob/master/docs/posts/2016-09-05-pouchdb-6.0.0.md
The constructor is now stateless. Use `db.info()` to test if setup can complete.
```javascript
new PouchDB(dbName).info()
```
--------------------------------
### Install Cordova Tool
Source: https://github.com/apache/pouchdb/blob/master/docs/posts/2016-04-28-prebuilt-databases-with-pouchdb.md
Installs the Cordova command-line interface globally.
```bash
$ npm install -g cordova
```
--------------------------------
### Install pouchdb-adapter-idb
Source: https://github.com/apache/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-idb/README.md
Install the pouchdb-adapter-idb package using npm.
```bash
npm install pouchdb-adapter-idb
```
--------------------------------
### Install PouchDB HTTP Adapter
Source: https://github.com/apache/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-http/README.md
Install the pouchdb-adapter-http package using npm.
```bash
npm install pouchdb-adapter-http
```
--------------------------------
### Install pouchdb-mapreduce
Source: https://github.com/apache/pouchdb/blob/master/packages/node_modules/pouchdb-mapreduce/README.md
Install the pouchdb-mapreduce plugin using npm.
```bash
npm install --save pouchdb-mapreduce
```
--------------------------------
### Get Database Information (Async/Await)
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/database_information.html
Use this method to retrieve metadata about the database. This example shows the async/await pattern.
```javascript
try {
const result = await db.info();
} catch (err) {
console.log(err);
}
```
--------------------------------
### Install pouchdb-checkpointer
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install pouchdb-checkpointer, a tool for writing checkpoints during replication. Use exact versions as it does not follow semver.
```bash
npm install --save-exact pouchdb-checkpointer
```
--------------------------------
### Install PouchDB Replication Plugin
Source: https://github.com/apache/pouchdb/blob/master/packages/node_modules/pouchdb-replication/README.md
Install the pouchdb-replication package using npm. This is the first step before using the plugin.
```bash
npm install pouchdb-replication
```
--------------------------------
### Install pouchdb-dump-cli
Source: https://github.com/apache/pouchdb/blob/master/docs/posts/2016-04-28-prebuilt-databases-with-pouchdb.md
Install the pouchdb-dump-cli globally to create plaintext dump files from PouchDB or CouchDB databases.
```bash
$ npm install -g pouchdb-dump-cli
```
--------------------------------
### Install pouchdb-mapreduce-utils
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install pouchdb-mapreduce-utils, containing utilities used by pouchdb-mapreduce. Use exact versions as it does not follow semver.
```bash
npm install --save-exact pouchdb-mapreduce-utils
```
--------------------------------
### Install pouchdb-adapter-utils
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install pouchdb-adapter-utils, a package containing utilities for PouchDB adapters. Use exact versions as it does not follow semver.
```bash
npm install --save-exact pouchdb-adapter-utils
```
--------------------------------
### Install pouchdb-binary-utils
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install pouchdb-binary-utils, a package for operating on binary strings and Buffers/Blobs. Use exact versions as it does not follow semver.
```bash
npm install --save-exact pouchdb-binary-utils
```
--------------------------------
### Install pouchdb-fetch
Source: https://github.com/apache/pouchdb/blob/master/packages/node_modules/pouchdb-fetch/README.md
Install the pouchdb-fetch package using npm. Use --save-exact to ensure an exact version is installed, as this package does not follow semver.
```bash
npm install --save-exact pouchdb-fetch
```
--------------------------------
### Install PouchDB Memory Adapter
Source: https://github.com/apache/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-memory/README.md
Install the pouchdb-adapter-memory package using npm.
```bash
npm install pouchdb-adapter-memory
```
--------------------------------
### Install pouchdb-selector-core
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install the core Mango selector logic package. This is used by pouchdb-find and for filtering/replication.
```bash
npm install --save-exact pouchdb-selector-core
```
--------------------------------
### Install CouchDB on Debian/Ubuntu
Source: https://github.com/apache/pouchdb/blob/master/docs/guides/setup-couchdb.md
Update package lists and install CouchDB after enabling the repository.
```bash
$ sudo apt-get update
$ sudo apt-get install -y couchdb
```
--------------------------------
### Install pouchdb-adapter-websql-core
Source: https://github.com/apache/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-websql-core/README.md
Install this package using npm with an exact version to ensure compatibility, as it does not follow semantic versioning.
```bash
npm install --save-exact @craftzdog/pouchdb-adapter-websql-core
```
--------------------------------
### Install pouchdb-adapter-leveldb-core
Source: https://github.com/apache/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-leveldb-core/README.md
Install the package using npm. Use --save-exact to ensure precise versioning as this package does not follow semver.
```bash
npm install --save-exact pouchdb-adapter-leveldb-core
```
--------------------------------
### Install PouchDB and SQLite Adapter
Source: https://github.com/apache/pouchdb/blob/master/docs/posts/2016-04-28-prebuilt-databases-with-pouchdb.md
Installs the necessary PouchDB package and the pouchdb-adapter-node-websql plugin using npm.
```bash
$ npm install pouchdb
$ npm install pouchdb-adapter-node-websql
```
--------------------------------
### Install PouchDB IndexedDB Adapter
Source: https://github.com/apache/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-indexeddb/README.md
Install the IndexedDB adapter using npm. This is the first step to using IndexedDB with PouchDB.
```bash
npm install pouchdb-adapter-indexeddb
```
--------------------------------
### Install pouchdb-md5
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install pouchdb-md5, which provides utilities for calculating MD5 checksums. Use exact versions as it does not follow semver.
```bash
npm install --save-exact pouchdb-md5
```
--------------------------------
### Install and Use pouchdb-mapreduce Plugin
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install the pouchdb-mapreduce plugin to enable the map/reduce API. Plugin it into PouchDB to use methods like `query()`.
```bash
npm install pouchdb-mapreduce
```
```javascript
PouchDB.plugin(require('pouchdb-mapreduce'));
const db = new PouchDB('mydb');
db.query(/* see query API docs for full info */);
```
--------------------------------
### Start PouchDB Server with SQLite Adapter
Source: https://github.com/apache/pouchdb/blob/master/docs/posts/2016-04-28-prebuilt-databases-with-pouchdb.md
Starts the PouchDB server with the SQLite adapter enabled, automatically creating SQLite database files.
```bash
$ pouchdb-server --sqlite
```
--------------------------------
### Install and Use IndexedDB Adapter
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install the IndexedDB adapter and configure PouchDB to use it. This is the primary adapter for browsers.
```bash
npm install pouchdb-adapter-idb
```
```javascript
PouchDB.plugin(require('pouchdb-adapter-idb'));
const db = new PouchDB('mydb', {adapter: 'idb'});
console.log(db.adapter); // 'idb'
```
--------------------------------
### Install and Use Experimental IndexedDB Adapter
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install the experimental next-generation IndexedDB adapter ('idb-next'). This is not yet part of the main PouchDB distribution.
```bash
npm install pouchdb-adapter-indexeddb
```
```javascript
PouchDB.plugin(require('pouchdb-adapter-indexeddb'));
const db = new PouchDB('mydb', {adapter: 'indexeddb'});
console.log(db.adapter); // 'indexeddb'
```
--------------------------------
### Download and Run Live Example
Source: https://github.com/apache/pouchdb/blob/master/docs/guides/databases.md
Commands to clone a PouchDB live example from GitHub and serve it locally using Python's HTTP server.
```bash
git clone https://gist.github.com/bddac54b92c2d8d39241.git kittens
cd kittens
python -m SimpleHTTPServer # for Python 2
python -m http.server # for Python 3
```
--------------------------------
### Create and Get a Local Document
Source: https://github.com/apache/pouchdb/blob/master/docs/guides/local-documents.md
Use `'_local/'` as the prefix for the `_id` to create a local document. You can then fetch it using `get()`.
```javascript
db.put({
_id: '_local/foobar',
someText: 'yo, this is my local doc!'
}).then(function () {
return db.get('_local/foobar');
});
```
--------------------------------
### Bulk Get Example Response Structure
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/bulk_get.html
This is an example of the JSON response structure returned by the bulkGet API. It shows successful document retrieval and error objects for missing documents or revisions.
```json
{
"results": [
{
"docs": [
{
"ok": {
"_id": "doc-that-exists",
"_rev": "1-967a00dff5e02add41819138abb3284d",
"_revisions": {
"ids": [
"967a00dff5e02add41819138abb3284d"
],
"start": 1
}
}
}
],
"id": "doc-that-exists"
},
{
"docs": [
{
"error": {
"error": "not_found",
"id": "doc-that-does-not-exist",
"reason": "missing",
"rev": "undefined"
}
}
],
"id": "doc-that-does-not-exist"
},
{
"docs": [
{
"error": {
"error": "not_found",
"id": "doc-that-exists",
"reason": "missing",
"rev": "1-badrev"
}
}
],
"id": "doc-that-exists"
}
]
}
```
--------------------------------
### Install pouchdb-ajax
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install pouchdb-ajax, which exposes PouchDB's ajax() function. Use exact versions as it does not follow semver.
```bash
npm install --save-exact pouchdb-ajax
```
--------------------------------
### Build and Serve PouchDB Website Locally
Source: https://github.com/apache/pouchdb/blob/master/CONTRIBUTING.md
Build the PouchDB website and start the development server.
```bash
npm run build-site
```
--------------------------------
### In-memory PouchDB
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/create_database.html
Example of creating an in-memory PouchDB database, which requires installing the 'pouchdb-adapter-memory' plugin.
```APIDOC
## Create In-Memory Database
### Description
Creates an in-memory PouchDB database. This is useful for testing or temporary data storage.
### Method
Constructor
### Endpoint
N/A (JavaScript API)
### Parameters
#### Path Parameters
None
#### Query Parameters
None
#### Request Body
None
### Request Example
```javascript
// Ensure 'pouchdb-adapter-memory' is installed first
const db = new PouchDB('dbname', {adapter: 'memory'});
```
### Options
* `adapter`: Set to `'memory'` to use the in-memory adapter.
### Response
#### Success Response (200)
Returns an in-memory PouchDB database instance.
#### Response Example
```javascript
const db = new PouchDB('myTempDb', {adapter: 'memory'});
```
```
--------------------------------
### Install and Use LocalStorage Adapter
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install the LocalStorage adapter for browser usage. This adapter stores data in the browser's LocalStorage.
```bash
npm install pouchdb-adapter-localstorage
```
```javascript
PouchDB.plugin(require('pouchdb-adapter-localstorage'));
const db = new PouchDB('mydb', {adapter: 'localstorage'});
console.log(db.adapter); // 'localstorage'
```
--------------------------------
### Get Attachment (Promise)
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/get_attachment.html
Example of retrieving an attachment using Promises. This method is useful for chaining asynchronous operations.
```javascript
db.getAttachment('doc', 'att.txt').then(function (blobOrBuffer) {
// handle result
}).catch(function (err) {
console.log(err);
});
```
--------------------------------
### Get Database Information (Promise)
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/database_information.html
Use this method to retrieve metadata about the database. This example shows the promise pattern.
```javascript
db.info().then(function (result) {
// handle result
}).catch(function (err) {
console.log(err);
});
```
--------------------------------
### Example Usage of Default PouchDB Constructors
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/defaults.html
Demonstrates creating PouchDB instances with default configurations like in-memory adapter, prefix for database names, and HTTP endpoints. Default options can be overridden when creating new instances.
```javascript
const MyMemPouch = PouchDB.defaults({ adapter: 'memory' });
// In-memory PouchDB
const myMemPouch = new MyMemPouch('dbname');
```
```javascript
const MyPrefixedPouch = PouchDB.defaults({ prefix: '/path/to/my/db/' });
// db will be named '/path/to/my/db/dbname', useful for LevelDB
const myPrefixedPouch = new MyPrefixedPouch('dbname');
```
```javascript
const HTTPPouch = PouchDB.defaults({ prefix: 'http://example.org' });
// db will be located at 'http://example.org/dbname'
const myHttpPouch = new HTTPPouch('dbname');
```
--------------------------------
### Install and Use WebSQL Adapter
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install the WebSQL adapter and configure PouchDB. This adapter was previously shipped by default but now requires explicit loading.
```bash
npm install pouchdb-adapter-websql
```
```javascript
PouchDB.plugin(require('pouchdb-adapter-websql'));
const db = new PouchDB('mydb', {adapter: 'websql'});
console.log(db.adapter); // 'websql'
```
--------------------------------
### Get Database Information (Callback)
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/database_information.html
Use this method to retrieve metadata about the database. This example shows the callback pattern.
```javascript
db.info(function(err, info) {
if (err) {
return console.log(err);
}
// handle result
});
```
--------------------------------
### Serve Project Locally
Source: https://github.com/apache/pouchdb/blob/master/docs/getting-started.md
Run a simple HTTP server to serve your project files. This is useful for avoiding filesystem access restrictions in browsers.
```bash
$ cd pouchdb-getting-started-todo
$ python -m SimpleHTTPServer # for Python 2
$ python -m http.server # for Python 3
```
--------------------------------
### Get Attachment (Async/Await)
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/get_attachment.html
Example of retrieving an attachment using async/await syntax. This is a modern approach for handling asynchronous operations.
```javascript
try {
const blobOrBuffer = await db.getAttachment('doc', 'att.txt');
} catch (err) {
console.log(err);
}
```
--------------------------------
### Create Index with Options (Async/Await)
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/create_index.html
Example of creating an index with additional options using async/await. Requires the pouchdb-find plugin.
```javascript
try {
const result = await db.createIndex({ index: { fields: ['foo', 'bar'], name: 'myindex', ddoc: 'mydesigndoc', type: 'json' } });
} catch (err) {
console.log(err);
}
```
--------------------------------
### Run Site with Hot Reloading
Source: https://github.com/apache/pouchdb/blob/master/docs/WEBSITE_README.md
Build the site with the --serve flag for full hot reloading. Note that this may not catch all style changes.
```sh
$ npm run build11 -- --serve
```
--------------------------------
### Get Attachment (Callback)
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/get_attachment.html
Example of retrieving an attachment using a callback function. Ensure the document and attachment IDs are correct.
```javascript
db.getAttachment('doc', 'att.txt', function(err, blobOrBuffer) {
if (err) {
return console.log(err);
}
// handle result
});
```
--------------------------------
### Changes API - Live Updates
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/changes.html
This example shows how to set up the changes() API for live updates, emitting events for each change.
```APIDOC
## changes() - Live Updates
### Description
Listens for changes in the database in real-time. When `live: true` is set, the `changes()` method returns an event emitter that fires events for each new change.
### Method
`db.changes({ live: true, ...options })`
### Event Emitters
- **'change'** (`info`): Fires for each change. If `include_docs` is true, `info.doc` will contain the document.
- **'complete'** (`info`): Fires when all changes have been read. In live changes, this typically only fires if the feed is cancelled.
- **'error'** (`err`): Fires when the changes feed stops due to an unrecoverable failure.
### Parameters
#### Query Parameters
- **live** (boolean) - Required - Set to `true` to enable live updates.
- **include_docs** (boolean) - Optional - If `true`, the full document will be included in the change event.
- **since** (number | string) - Optional - The sequence number to start retrieving changes from. Use `'now'` to start from the current point in time.
### Request Example
```javascript
const changes = db.changes({
live: true,
include_docs: true,
since: 'now'
});
changes.on('change', function (info) {
console.log('Change:', info);
// info.doc will contain the doc if include_docs is true
});
changes.on('complete', function (info) {
console.log('Changes feed complete:', info);
});
changes.on('error', function (err) {
console.log('Error in changes feed:', err);
});
// To stop listening:
// changes.cancel();
```
### Response Examples
#### Example response in the `'change'` listener (using `{include_docs: true}`):
```json
{
"id": "doc1",
"changes": [
{
"rev": "1-9152679630cc461b9477792d93b83eae"
}
],
"doc": {
"_id": "doc1",
"_rev": "1-9152679630cc461b9477792d93b83eae"
},
"seq": 1
}
```
#### Example response in the `'change'` listener when a doc was deleted:
```json
{
"id": "doc2",
"changes": [
{
"rev": "2-9b50a4b63008378e8d0718a9ad05c7af"
}
],
"doc": {
"_id": "doc2",
"_rev": "2-9b50a4b63008378e8d0718a9ad05c7af",
"_deleted": true
},
"deleted": true,
"seq": 3
}
```
#### Example response in the `'complete'` listener:
```json
{
"results": [
{
"id": "doc1",
"changes": [
{
"rev": "1-9152679630cc461b9477792d93b83eae"
}
],
"doc": {
"_id": "doc1",
"_rev": "1-9152679630cc461b9477792d93b83eae"
},
"seq": 1
},
{
"id": "doc2",
"changes": [
{
"rev": "2-9b50a4b63008378e8d0718a9ad05c7af"
}
],
"doc": {
"_id": "doc2",
"_rev": "2-9b50a4b63008378e8d0718a9ad05c7af",
"_deleted": true
},
"deleted": true,
"seq": 3
}
],
"last_seq": 3
}
```
```
--------------------------------
### Fetching All Documents with Options
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/batch_fetch.html
Demonstrates fetching all documents with options like including document content and attachments, and specifying a range using startkey and endkey.
```APIDOC
## db.allDocs()
### Description
Fetches all documents in the database, with options to include document content, attachments, and specify a key range.
### Method
`db.allDocs(options, callback)`
`db.allDocs(options)` (Promise)
`await db.allDocs(options)` (Async/Await)
### Parameters
#### Options Object
- **include_docs** (boolean) - Optional - If true, includes the full document for each row.
- **attachments** (boolean) - Optional - If true, includes attachment data.
- **startkey** (string) - Optional - The key to start searching from.
- **endkey** (string) - Optional - The key to end searching at.
### Request Example (Promise)
```js
db.allDocs({
include_docs: true,
attachments: true,
startkey: 'bar',
endkey: 'quux'
}).then(function (result) {
// handle result
}).catch(function (err) {
console.log(err);
});
```
### Response
#### Success Response (200)
- **rows** (array) - An array of document objects.
- **doc** (object) - The document object (if `include_docs` is true).
- **id** (string) - The document ID.
- **rev** (string) - The document revision.
#### Response Example
```json
{
"rows": [
{
"id": "doc1",
"key": "doc1",
"value": {
"rev": "1-abc"
},
"doc": {
"_id": "doc1",
"_rev": "1-abc",
"data": "some data"
}
}
]
}
```
```
--------------------------------
### Clone PouchDB Repository and Install Dependencies
Source: https://github.com/apache/pouchdb/blob/master/README.md
Follow these steps to build PouchDB from source. This is useful for developers who want to use prerelease builds or contribute to the project.
```bash
git clone https://github.com/pouchdb/pouchdb.git
cd pouchdb
npm install
```
--------------------------------
### PouchDB Bulk Get with Async/Await
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/bulk_get.html
This example demonstrates fetching multiple documents using the async/await syntax for cleaner asynchronous code. It includes error handling with a try-catch block.
```javascript
try {
const result = await db.bulkGet({
docs: [
{ id: "doc-that-exists", rev: "1-967a00dff5e02add41819138abb3284d"},
{ id: "doc-that-does-not-exist", rev: "1-3a24009a9525bde9e4bfa8a99046b00d"},
{ id: "doc-that-exists", rev: "1-bad_rev"}
]
});
} catch (err) {
console.log(err);
}
```
--------------------------------
### Querying with a Map Function (Range and Limit)
Source: https://github.com/apache/pouchdb/blob/master/docs/guides/queries.md
Example of using `pouch.query()` with `startkey`, `endkey`, and `limit` to find a range of documents, such as the first 5 Pokemon whose names start with 'P'.
```javascript
// find the first 5 pokemon whose name starts with 'P'
pouch.query(myMapFunction, {
startkey : 'P',
endkey : 'P\ufff0',
limit : 5,
include_docs : true
}).then(function (result) {
// handle result
}).catch(function (err) {
// handle errors
});
```
--------------------------------
### Include PouchDB via CDN
Source: https://github.com/apache/pouchdb/blob/master/docs/download.md
Use this snippet to include the PouchDB library directly in your HTML using a CDN link. This is a quick way to get started without a build process.
```html
```
--------------------------------
### Run development server with find plugin
Source: https://github.com/apache/pouchdb/blob/master/TESTING.md
Start the development server, including the 'pouchdb-find' plugin, to test PouchDB in the browser. This is necessary for 'find' tests to pass.
```bash
$ PLUGINS=pouchdb-find npm run dev
```
--------------------------------
### Install PouchDB Browser for faster installs
Source: https://github.com/apache/pouchdb/blob/master/docs/download.md
If PouchDB is only used in the browser, install `pouchdb-browser` for potentially faster installation times. This package is optimized for browser environments.
```bash
npm install --save pouchdb-browser
```
--------------------------------
### Example Response
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/delete_index.html
This is an example of a successful response when deleting an index.
```json
{ "ok": true }
```
--------------------------------
### Start Live Replication with Event Handlers
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/replication.html
Initiates a live replication between two databases and sets up event listeners for changes, pauses, active states, denials, completion, and errors. Call `rep.cancel()` to stop the replication.
```javascript
const rep = PouchDB.replicate('mydb', 'http://localhost:5984/mydb', { live: true, retry: true }).on('change', function (info) {
// handle change
}).on('paused', function (err) {
// replication paused (e.g. replication up to date, user went offline)
}).on('active', function () {
// replicate resumed (e.g. new changes replicating, user went back online)
}).on('denied', function (err) {
// a document failed to replicate (e.g. due to permissions)
}).on('complete', function (info) {
// handle complete
}).on('error', function (err) {
// handle error
});
rep.cancel(); // whenever you want to cancel
```
--------------------------------
### Install and Use pouchdb-replication Plugin
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install the pouchdb-replication plugin to enable replication and sync functionalities. Plugin it into PouchDB to use methods like `replicate()` and `sync()`.
```bash
npm install pouchdb-replication
```
```javascript
PouchDB.plugin(require('pouchdb-replication'));
const db = new PouchDB('mydb');
db.replicate(/* see replicate/sync API docs for full info */);
```
--------------------------------
### Install pouchdb-utils
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install the miscellaneous utilities package used by PouchDB and its sub-packages.
```bash
npm install --save-exact pouchdb-utils
```
--------------------------------
### Querying with Async/Await and Joining Documents
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/query_database.html
This async/await example demonstrates joining artist data to albums. It uses a try-catch block for error handling.
```javascript
function map(doc) {
// join artist data to albums
if (doc.type === 'album') {
emit(doc.name, {"_id" : doc.artistId, albumYear : doc.year});
}
}
try {
const result = await db.query(map, {include_docs : true});
} catch (err) {
console.log(err);
}
```
--------------------------------
### Smart Pagination Method with Startkey
Source: https://github.com/apache/pouchdb/blob/master/docs/posts/2014-04-14-pagination-strategies-with-pouchdb.md
Use this method for efficient pagination. It leverages the 'startkey' option to specify the beginning of the next page, avoiding performance issues associated with large skips.
```javascript
var options = {limit : 5};
function fetchNextPage() {
pouch.allDocs(options, function (err, response) {
if (response && response.rows.length > 0) {
options.startkey = response.rows[response.rows.length - 1].id;
options.skip = 1;
}
// handle err or response
});
}
```
--------------------------------
### Compaction Response Example
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/compaction.html
An example of the response object returned after a successful compaction operation.
```json
{
"ok" : "true"
}
```
--------------------------------
### Handle Change Events
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/changes.html
Example of setting up listeners for 'change', 'complete', and 'error' events when monitoring database changes. Remember to call `cancel()` when you no longer need to listen.
```javascript
const changes = db.changes({
since: 'now',
live: true,
include_docs: true
}).on('change', function(change) {
// handle change
}).on('complete', function(info) {
// changes() was canceled
}).on('error', function (err) {
console.log(err);
});
changes.cancel(); // whenever you want to cancel
```
--------------------------------
### PouchDB Installation Errors on Windows (Python)
Source: https://github.com/apache/pouchdb/blob/master/docs/errors.md
When `npm install pouchdb` fails on Windows due to missing Python, ensure Python 2.7 is installed and accessible, or consider using `pouchdb-browser` for browser-only applications.
```bash
C:\XXX\node_modules\project_name>if not defined npm_config_node_gyp (node "C:\XXX\node_modules\npm\bin\node-gyp-bin\....\node_modules\node-gyp\bin\node-gyp.js" rebuild ) else (node "" rebuild )
gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack at PythonFinder.failNoPython (C:\XXX\nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:483:19)
```
```bash
gyp ERR! configure error
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! leveldown@3.0.0 install: `prebuild-install || node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the leveldown@3.0.0 install script.
```
--------------------------------
### CouchDB welcome response
Source: https://github.com/apache/pouchdb/blob/master/docs/guides/setup-couchdb.md
Example of the expected JSON response when verifying CouchDB is running.
```json
{"couchdb":"Welcome","version":"2.2.0",...}
```
--------------------------------
### Install PouchDB with npm
Source: https://github.com/apache/pouchdb/blob/master/docs/guides/setup-pouchdb.md
Install PouchDB using npm and include the JavaScript file in your HTML.
```bash
$ npm install pouchdb
```
```html
```
--------------------------------
### Initialize PouchDB with IndexedDB Adapter
Source: https://github.com/apache/pouchdb/blob/master/packages/node_modules/pouchdb-adapter-indexeddb/README.md
Plugin the IndexedDB adapter into PouchDB and create a new database instance. Specify 'indexeddb' as the adapter.
```javascript
PouchDB.plugin(require('pouchdb-adapter-indexeddb'));
var db = new PouchDB('mydb', {adapter: 'indexeddb'});
```
--------------------------------
### Install PouchDB with Bower
Source: https://github.com/apache/pouchdb/blob/master/docs/guides/setup-pouchdb.md
Install PouchDB using Bower and include the JavaScript file in your HTML.
```bash
$ bower install pouchdb
```
```html
```
--------------------------------
### Explain Index with Async/Await
Source: https://github.com/apache/pouchdb/blob/master/docs/_includes/api/explain_index.html
Example of using the explain index API with async/await syntax for cleaner asynchronous code. The pouchdb-find plugin is required.
```javascript
try {
const explanation = await db.explain({
selector: { name: 'Mario', series: "mario" },
fields: ['_id', 'name'],
sort: ['name']
});
} catch (err) {
console.log(err);
}
```
--------------------------------
### Install PouchDB
Source: https://github.com/apache/pouchdb/blob/master/packages/node_modules/pouchdb/README.md
Install the PouchDB package using npm. This is the first step to using PouchDB in your project.
```bash
npm install pouchdb
```
--------------------------------
### Synchronous LocalStorage Example
Source: https://github.com/apache/pouchdb/blob/master/docs/posts/2015-03-05-taming-the-async-beast-with-es7.md
Demonstrates the simple, synchronous API of LocalStorage for data persistence.
```javascript
if (!localStorage.foo) {
localStorage.foo = 'bar';
};
console.log(localStorage.foo);
```
--------------------------------
### Install Cordova Plugins
Source: https://github.com/apache/pouchdb/blob/master/docs/posts/2016-04-28-prebuilt-databases-with-pouchdb.md
Install the File Plugin and SQLite Plugin 2 for Cordova app development.
```bash
$cordova plugin add cordova-plugin-file --save
$cordova plugin add cordova-plugin-sqlite-2 --save
```
--------------------------------
### Basic Live Replication
Source: https://github.com/apache/pouchdb/blob/master/docs/guides/replication.md
Initiates a live replication between two databases. Listen for 'change' and 'error' events.
```javascript
localDB.sync(remoteDB, {
live: true
}).on('change', function (change) {
// yo, something changed!
}).on('error', function (err) {
// yo, we got an error! (maybe the user went offline?)
});
```
--------------------------------
### Install sublevel-pouchdb
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install the sublevel-pouchdb package, a fork of level-sublevel containing only the subset of the API that PouchDB uses.
```bash
npm install --save-exact sublevel-pouchdb
```
--------------------------------
### Install pouchdb-abstract-mapreduce
Source: https://github.com/apache/pouchdb/blob/master/docs/custom.md
Install pouchdb-abstract-mapreduce, which provides the underlying logic for secondary indexes used by pouchdb-mapreduce and pouchdb-find. Use exact versions as it does not follow semver.
```bash
npm install --save-exact pouchdb-abstract-mapreduce
```
--------------------------------
### Install add-cors-to-couchdb
Source: https://github.com/apache/pouchdb/blob/master/docs/getting-started.md
Install the `add-cors-to-couchdb` tool globally to enable CORS for CouchDB. This is necessary for direct replication.
```bash
$ npm install -g add-cors-to-couchdb
$ add-cors-to-couchdb
```
```bash
$ add-cors-to-couchdb http://me.example.com -u myusername -p mypassword
```
--------------------------------
### Initialize PouchDB Database
Source: https://github.com/apache/pouchdb/blob/master/docs/posts/2015-02-28-efficiently-managing-ui-state-in-pouchdb.md
Instantiate a new PouchDB database. This is the first step before interacting with PouchDB.
```javascript
var db = new PouchDB('my_db');
```
--------------------------------
### Install PouchDB Find via npm
Source: https://github.com/apache/pouchdb/blob/master/packages/node_modules/pouchdb-find/README.md
Install the PouchDB Find plugin using npm for Node.js projects.
```bash
npm install pouchdb-find
```
--------------------------------
### Install PouchDB Find via Bower
Source: https://github.com/apache/pouchdb/blob/master/packages/node_modules/pouchdb-find/README.md
Install the PouchDB Find plugin using Bower for browser projects.
```bash
bower install pouchdb-find
```
--------------------------------
### Build PouchDB Locally
Source: https://github.com/apache/pouchdb/blob/master/CONTRIBUTING.md
Steps to build PouchDB from source after installing dependencies.
```bash
cd pouchdb
npm install
npm run build
```