changes

A consistent, fault tolerant CouchDB _changes listener with pre-fetch support

MIT License

Downloads
28
Stars
8

changes

A consistent, fault tolerant CouchDB _changes listener with pre-fetch support.

Usage

  var Changes = require('changes');
  
  var changes = new Changes({
    url: 'http://user:[email protected]:5984/database',
    timeout: {
      max:  60000,
      step: 5000
    }
  });
  
  //
  // Dump changes as they come in.
  //
  changes.on('change', function (doc) {
    console.dir(doc);
  });
  
  //
  // The callback will be called once a _changes
  // connection has been established or with an
  // error if the first connection fails.
  //
  changes.listen(function (err) {
    if (err) {
      console.log('Did not connect to _changes on first attempt');
      console.dir(err);
      changes.retry.enabled = false;
      return process.exit(1);
    }
    
    console.log('Listening for _changes');
  });

Pre-fetching Views

Often when you establish a connection to _changes you also want to know about the other documents in a view before the current update_seq. This is supported like this:

  var Changes = require('changes');
  
  var changes = new Changes({
    url: 'http://user:[email protected]:5984/database',
    views: {
      'important': {
        path: '_design/Some/_view/name',
        query: { include_docs: true }
      }
    },
    timeout: {
      max:  60000,
      step: 5000
    }
  });

  //
  // All rows from a queries view will be emitted
  // in the `views:<name>` event **before** the
  // `_changes` listener starts. 
  //
  changes.on('views:important', function (rows) {
    //
    // Dump any existing "important" rows.
    //
    console.dir(rows);
  });
  
  //
  // Dump changes as they come in.
  //
  changes.on('change', function (doc) {
    console.dir(doc);
  });
  
  //
  // The callback will be called once a _changes
  // connection has been established or with an
  // error if the first connection fails.
  //
  changes.listen(function (err) {
    if (err) {
      console.log('Did not connect to _changes on first attempt');
      console.dir(err);
      changes.retry.enabled = false;
      return process.exit(1);
    }
    
    console.log('Listening for _changes');
  });

Filtering _changes feed

CouchDB's filtered _changes feed is documented here. All Changes needs to make use of it is a filter option:

var Changes = require('changes');

var changes = new Changes({
  url: 'http://user:[email protected]:5984/database',
  filter: 'app/filter'
});

License: MIT

Authors: Bradley Meck, Maciej Malecki, Charlie Robbins