node package manager

pouch-remote-stream

pouch-remote-stream

By Build Status

Consume a remote PouchDB stream.

Goes well with pouch-stream-server on the server side.

PouchDB versions

Tested against PouchDB version 5.

Install

$ npm install pouch-remote-stream --save

Getting started

1. Require it

var Remote = require('pouch-remote-stream');

2. Add the PouchDB adapter

PouchDB.adapter('remote', Remote.adapter);

3. Create the remote

var remote = Remote();

4. Create the remote PouchDB database

var remoteDB = new PouchDB('mydb', {
  adapter: 'remote',
  remote: remote 
});

5. Pipe it to and from a duplex stream

var stream = somehowCreateSomeDuplexStream();
 
stream.pipe(remote.stream()).pipe(stream);

6. Use the PouchDB remote DB

, for example to sync a local DB:

var localDB = new PouchDB('someLocalDB');
localDB.sync(remoteDB);

Any stream, really

You can pipe it to and from any duplex object stream.

Encode and decode streams

If you need to work with a raw duplex stream (like a TCP or a web socket), you will need to encode and decode the stream. For example, you can use a new-line separated JSON duplex stream like this:

var JSONDuplexStream = require('json-duplex-stream');
 
var JSONStream = JSONDuplexStream();
 
var rawDuplexStream = createRawStreamSomehow();
 
// raw => JSON.in => remote.stream => JSON.out => raw 
 
rawDuplexStream.
  pipe(JSONStream.in).
  pipe(remote.stream).
  pipe(JSONStream.out).
  pipe(rawDuplexStream);

You can use with reconnect:

Here's an example of using a TCP stream and reconnecting if the connection goes down:

var Remote = require('pouch-remote-stream');
PouchDB.adapter('remote', Remote.adapter);
var Reconnect = require('reconnect-core');
 
var reconnect = Reconnect(function(options) {
  return net.connect(options.port, options.host);
});
 
var options = {
  port: 80,
  host: '127.0.0.1'
};
 
var re = reconnect(options, function(stream) {
  var remote = Remote();
 
  var remoteDB = new PouchDB('mydb', {
    adapter: 'remote',
    remote: remote 
  });
 
  stream.pipe(remote.stream).pipe(stream);
 
  // use remoteDB 
 
});

License

ISC