changes

1.1.1 • Public • Published

changes

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

Usage

  var Changes = require('changes');
  
  var changes = new Changes({
    url: 'http://user:pass@127.0.0.1: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:pass@127.0.0.1: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');
  });

License: MIT

Authors: Bradley Meck, Maciej Malecki, Charlie Robbins

Dependents (1)

Package Sidebar

Install

npm i changes

Weekly Downloads

15

Version

1.1.1

License

none

Last publish

Collaborators

  • indexzero
  • bmeck