concurrent-couch-follower
a couch follower wrapper that you can use to be sure you don't miss any documents even if you process them asynchronously.
var changes = var someAction = var { } var configOptions = db: 'https://url.to.couchdb/registry/_changes' include_docs:true sequence:'.sequence' now:false concurrency:5
API
changes(handler,options)
-
handler = function(change,done) is a function that is called for every document
-
change, the change from couchdb {seq:sequence,doc:the document,....}
-
done, you must call this function when you are done processing the document.
-
options a config object as passed to
changes-stream
but including these additional properties.db
, the connection string url pointing to the CouchDB registry to be followed.sequence
, the name of the file to persist the sequence id, if this is a function this is passed as a persist function to concurrent-seq-file.concurrency
, the maximum number of documents to process at a time.- the
changes-stream
propertysince
is populated by the value of the sequence file and cannot be set from outside except ifnow
is set totrue
. now
, iftrue
, set thechanges-stream
propertysince
to "now" (instead of 0) on the first start (before.sequence
has been created)since
only used, but is required, if you are using a custom backend to save the sequence ids. when you pass a function as sequence.
-
stream = changes(handle,options)
-
sream , return value is a readable object stream of
data
passed back withdone(err,data)
-
stream.sequence()
-
returns current sequence id saved to disk. useful for logging.
-
WARNING! stream.end()
-
this calls destroy on the changes-stream and the through instead of properly ending them.
- this triggers a "premature close" error from
changes-stream
and is something that just has to be worked on. binderror
or useend-of-stream
- this triggers a "premature close" error from
more examples
save the sequence ids in a database.
var changes = var someAction = var { }