0.10.2 • Public • Published

    Couchapp Utils

    This is a fork of the couchapp module that does not do platform specific stuff that is unnecessary such as playing sounds, if you really want sound, trigger the bell with an ANSI escape sequence, eh?


    Install node.

    Install npm.

    $ git clone repo
    $ cd node.couchapp.js
    $ npm install
    $ npm link .
    $ couchapp help
    couchapp -- utility for creating couchapps
    Usage - old style with single app.js:
      couchapp <command> app.js http://localhost:5984/dbname [opts]
    Usage - new style with multiple app files:
      directory based config specified by switch - multiple app files and pre- and post-processing capability)
      couchapp -dc < <appconfigdirectory> http://localhost:5984/dbname
      push   : Push app once to server.
      sync   : Push app then watch local files for changes.
      boiler : Create a boiler project.
      serve  : Serve couchapp from development webserver
                you can specify some options
                -p port  : list on port portNum [default=3000]
                -d dir   : attachments directory [default='attachments']
                -l       : log rewrites to couchdb [default='false']
    Directory-based config:
      -dc (directory config) switch uses multiple config files in the directory specified by <appconfigdirectory>
      Any file with a filename that begins with "app" will be executed.
      (i) if the app config directory contains file beforepushsync.js then this will be executed before any of the app files have run
      (ii) if the app config directory contains file afterpushsync.js then this will be executed after all of the app files have run
      beforepushsync.js and afterpushsync.js can be used to perform any before/after processing, using node.js code for example.
      The sample afterpushsync.js shows lookup data being added to CouchDB after the CouchApp has been pushed.

    app.js example:

      var couchapp = require('couchapp')
        , path = require('path');
      ddoc = {
          _id: '_design/app'
        , views: {}
        , lists: {}
        , shows: {} 
      module.exports = ddoc;
      ddoc.views.byType = {
        map: function(doc) {
          emit(doc.type, null);
        reduce: '_count'
      ddoc.views.peopleByName = {
        map: function(doc) {
          if(doc.type == 'person') {
            emit(, null);
      ddoc.lists.people = function(head, req) {
          headers: {"Content-type": "text/html"}
        send("<ul id='people'>\n");
        while(row = getRow()) {
          send("\t<li class='person name'>" + row.key + "</li>\n");
      ddoc.shows.person = function(doc, req) {
        return {
          headers: {"Content-type": "text/html"},
          body: "<h1 id='person' class='name'>" + + "</h1>\n"
      ddoc.validate_doc_update = function (newDoc, oldDoc, userCtx) {
        function require(field, message) {
          message = message || "Document must have a " + field;
          if (!newDoc[field]) throw({forbidden : message});
        if (newDoc.type == "person") {
      couchapp.loadAttachments(ddoc, path.join(__dirname, '_attachments'));

    Local development server example.

    Start the server:

    couchapp serve app.js http://localhost:5984/example_db -p 3000 -l -d attachments

    Now you can access your couchapp at http://localhost:3000/ . Code, hack and when you are happy with the result simply do:

    couchapp push app.js http://localhost:5984/example_db




    npm i couchapp-util

    DownloadsWeekly Downloads






    Last publish


    • muji
    • tmpfs