https://github.com/npm/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.
https://github.com/npm/concurrent-couch-follower
Last synced: 10 months ago
JSON representation
a couch follower wrapper that you can use to be sure you don't miss any documents even if you process them asynchronously.
- Host: GitHub
- URL: https://github.com/npm/concurrent-couch-follower
- Owner: npm
- License: isc
- Archived: true
- Created: 2015-10-22T14:34:25.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2021-06-04T03:25:31.000Z (about 5 years ago)
- Last Synced: 2024-10-01T16:06:33.850Z (almost 2 years ago)
- Language: JavaScript
- Size: 11.7 KB
- Stars: 31
- Watchers: 19
- Forks: 7
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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.
```js
var changes = require('concurrent-couch-follower')
var someAction = require(.....)
var dataHandler = function(data, done) {
someAction(data, function() {
done()
})
}
var configOptions = {
db: 'https://url.to.couchdb/registry/_changes',
include_docs:true,
sequence:'.sequence',
now:false,
concurrency:5
}
changes(dataHandler, configOptions)
```
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` property `since` is populated by the value of the sequence file and cannot be set from outside except if `now` is set to `true`.
- `now`, if `true`, set the `changes-stream` property `since` 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 with `done(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. bind `error` or use `end-of-stream`
more examples
-------------
save the sequence ids in a database.
```js
var changes = require('concurrent-couch-follower')
var someAction = require(.....)
var dataHandler = function(data, done) {
someAction(data, function() {
done()
})
}
loadSequenceFromDB(function(err,sequence){
var configOptions = {
db: 'https://url.to.couchdb/registry/_changes',
include_docs:true,
sequence:function(seq,cb){
saveInDB(seq,cb)
},
since:sequence,
concurrency:5
}
changes(dataHandler, configOptions)
})
```