Support of CouchDB for Node.js


Objects

Icon Description
NodeJS CouchDB database

Supported libraries

Library require Versions
CouchDB couch-db 0.1.0 to 1.1.3
Node CouchDB node-couchdb 1.0.2 to 2.0.0

The links will be created between the caller NodeJS Objects and NodeJS CouchDB database.

Link Type Supported APIs
useSelectLink get
useInsertLink insert
attach
open
useUpdateLink update
save
useDeleteLink del

What results can you expect?

Some example scenarios are shown below:

node-couchdb module

Database creation “myDatabase”

const NodeCouchDb = require('node-couchdb');

// node-couchdb instance with default options
const couch = new NodeCouchDb();
dbName = 'myDatabase';

couch.createDatabase(dbName).then(() => { }, err => {
    // request error occured
});
couch.get("myDatabase", "some_document_id").then(({data, headers, status}) => {
    // data is json response
    // headers is an object with all response headers
    // status is statusCode number
}, err => {
    // either request error occured
    // ...or err.code=EDOCMISSING if document is missing
    // ...or err.code=EUNKNOWN if statusCode is unexpected
});
couch.insert("myDatabase", {
    _id: "document_id",
    field: ["sample", "data", true]
}).then(({data, headers, status}) => {
    // data is json response
    // headers is an object with all response headers
    // status is statusCode number
}, err => {
    // either request error occured
    // ...or err.code=EDOCCONFLICT if document with the same id already exists
});
couch.update("myDatabase", {
    _id: "document_id",
    _rev: "1-xxx"
    field: "new sample data",
    field2: 1
}).then(({data, headers, status}) => {
    // data is json response
    // headers is an object with all response headers
    // status is statusCode number
}, err => {
    // either request error occured
    // ...or err.code=EFIELDMISSING if either _id or _rev fields are missing
});
couch.del("myDatabase", "some_document_id", "document_revision").then(({data, headers, status}) => {
    // data is json response
    // headers is an object with all response headers
    // status is statusCode number
}, err => {
    // either request error occured
    // ...or err.code=EDOCMISSING if document does not exist
    // ...or err.code=EUNKNOWN if response status code is unexpected
});

couch-db module

Database creation “myDatabase”

var myCouchDB = require('couch-db').CouchDB,
    server = new myCouchDB('http://localhost:5984');

server.auth(username, password);

server.bind('myDatabase');
var db = server.myDatabase;
// new document
var doc = db.testdb.doc({});
doc.attach([{
    name: 'place.css',
    content_type: 'text/css',
    data: 'body { font-size: 12px; }'
}, {
    name: 'script.js',
    content_type: 'script/javascript',
    data: 'window.onload(function() {})'
}]).create(function(err) {

});

Connector “couch-db”

db.destroy(function(err) {
    // create a new database
    db.create(function(err) {
        // insert a document with id 'jack johns'
        db.insert({ _id: 'jack johns', name: 'jack' }, function(err, body) {
            if (err) {
                console.log('insertion failed ', err.message);
                return;
            }
            console.log(body);
            // body will like following:
            //   { ok: true,
            //     id: 'jack johns',
            //     rev: '1-610953b93b8bf1bae12427e2de181307' }
        });
    });
});
var doc = db.testdb.doc({});
// open to get revision or assign revision to the document
doc.open(function(err) {
    doc.attach('plain.css', 'body { font-size:12pt; }', 'text/css');
    // save the doc
    doc.save(function(err, rs) {
        var plain = doc.attachment('plain.txt');
        // retrieve attachment
        plain.get(function(err, body) {
            assert.equal(body, 'body { font-size:12pt; }');
            // update
            plain.update('body { font-size:14pt; }', 'text/css', function(err) {
                plain.get(function(err, body) {
                    assert.equal(body, 'body { font-size:14pt; }');
                });
            });
        });
    });