couch-update-views

1.0.10 • Public • Published

couch-update-views

  • Do you use git and would like to maintain a copy of your couchdb view's code in your repository?
  • Do you have multiple couchdb to maintain (production, development)?

couch-update-views allows you to synchronize design views from a local directory to your couch database. It will also help you update the JSON document of a view in your local directory with the view's content in the database.

Installing couch-update-views


npm install couch-update-views

Running couch-update-views:

Generate a script

Name your script, ex: couchUpdateViews.js and add the following lines:


var couchUpdateViews = require('couch-update-views');
couchUpdateViews.couchUpdateViews();

You should see the following output:


node couchUpdateViews.js --migrate | --update <design view name>
Options:
    --migrate    Migrate design documents in couchdb. The 'design views' in couchdb are updated with the contents of the 'viewsDir' folder if they differ.
    --update  <design view name>   Update the design view document stored in 'viewsDirs' with the document stored in 'couchDB'    
    --viewsDir <path>   Directory with desgin views documents JSON files. (required)
    --couchDB  <url>    CouchDB URL. (required)

Synchronize the DB with the folder content


node couchUpdateViews.js --migrate --viewsDir /path/to/views/folder --couchDB http://localhost:5984/dbname

If the dbname does not exist, it will create the db for you and add all the views for you.

Update a view

Generate your view using couchdb utils. If you are running couchdb locally and using the default port visit:


http://localhost:5984/_utils/database.html?dbname/_temp_view

  • Write the view's code:

In the 'Map Function' box add:


function(doc){
	if(doc.type === "user"){
		emit(doc.email, doc.name);
	}
}

  • Save the view using 'Save As...' button

Design document: _design/searchUser

View Name: email

  • Update the view's content in your local folder:

node couchUpdateViews.js --viewsDir /path/to/views/folder --couchDB http://localhost:5984/dbname --update searchUser

The output of this command yields a file named 'searchUser.json' located at '--viewsDir' folder. The content of the file should look like:


{
    "_id": "_design/searchUser",
    "language": "javascript",
    "views": {
        "email": {
            "map": "function(doc) {\n\tif(doc.type === \"user\"){\n\t\temit(doc.email, doc.name);\n\t}\n}"
        }
    }
}

Using couch-update-views w/o command line

Synchronize the DB with the folder content


var couchUpdateViews = require('couch-update-views');
couchUpdateViews.migrateUp('http://localhost:5984/dbname', '/path/to/views')//DB URL, your local folder with views
.then(function(res){
	console.log(res);//result of the operation
});

Update a view


var couchUpdateViews = require('couch-update-views');
couchUpdateViews.updateDesignDocument('http://localhost:5984/dbname', '/path/to/views', 'searchUser')//DB URL, local folder, view name
.then(function(res){
	console.log(res);//result of operation
});

Use case example when starting your server application

In this example, I'm using Hapi as my server. The plugin configuration has the couchdb url.


conf = {
	"couchdb": "http://localhost:5984/somedb",
	"dirname": "/local/path/to/views"
}


module.exports = function (server, conf) {
	
	var couchUpdateViews = require('couch-update-views');
	var path = require('path');

	/*
	*	@params couchdb, url of couchdb
	*	@params dirname, path to directory containing the json documents of views
	*	@params test, boolean to specify if it should test for differences in the view. If true, a message will be print indicating that there are differences *	in the documents. If false or undefined, whenever there are differences in the document, the view will be pushed to couchdb. 
	*/
	couchUpdateViews.migrateUp(conf.couchdb, conf.dirname, true)
	.then(function(res){
		console.log(res);//result of the operation
	});

	//Other server logic, routes etc.
}

Package Sidebar

Install

npm i couch-update-views

Weekly Downloads

1

Version

1.0.10

License

Apache-2.0

Unpacked Size

18.8 kB

Total Files

11

Last publish

Collaborators

  • juanprietob