-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Description
Issue
According to the documentation:
https://pouchdb.com/api.html#plugins
Example Plugin: Intercept Updates
A useful feature of plugins is to intercept updates before they are stored in PouchDB. In this way, a plugin might validate that the data is correct for the application, or even alter documents before they are committed to the database.
The best way to intercept all updates to a PouchDB database is to override the bulkDocs() method. All changes to PouchDB documents ultimately pass through the bulkDocs() method. For example, a call to put() will become a bulkDocs() call with a “batch” of one document.
Because PouchDB guarantees to plugin authors that all data changes ultimately happen via bulkDocs(), it is the ideal place for an application or plugin to intercept updates.
// Keep a reference to the "upstream" function.
var pouchBulkDocs = PouchDB.prototype.bulkDocs;
PouchDB.plugin({bulkDocs: validBulkDocs});
function validBulkDocs(body, options, callback) {
if (typeof options == 'function') {
callback = options
options = {}
}
if (Array.isArray(body)) {
var docs = body;
} else {
var docs = body.docs;
}
// All documents must have a .name field.
for (var i = 0; i < docs.length; i++) {
if (!docs[i].name) {
var id = doc._id || '(no _id given)';
return callback(new Error('Document is missing .name field: ' + id));
}
}
// All documents check out. Pass them to PouchDB.
return pouchBulkDocs.call(this, docs, options, callback);
}
The problems are that now with version 8.0.0:
var pouchBulkDocs = PouchDB.prototype.bulkDocs is undefined.
and
PouchDB.plugin({bulkDocs: validBulkDocs});
it's not overriding the bulkDocs with validBulkDocs anymore (the original one will be called).
Info
- Environment: Browser
- Platform: Chrome
- Adapter: idb
- Server: CouchDB