Quick and easy API exposing and consuming client/server side
Switch branches/tags
Latest commit 64c1227 May 24, 2013 Ryan Schmukler Ryan Schmukler Fixed a bug w/ arg object
Failed to load latest commit information.
lib Fixed a bug w/ arg object May 24, 2013
.gitignore Initial Implementation May 3, 2013
History.md Release 0.2.0 May 21, 2013
README.md Documentation fix May 6, 2013
component.json Release 0.2.0 May 21, 2013
package.json Release 0.2.0 May 21, 2013



Curate makes it easy to quickly expose database queries to an express-api. It also features a client component that makes it easy to consume those API methods.

It works especially well with modella and chino.



app.js var app = express(), curate = require('curate');

curate.app = app;
curate.namespace = 'api/v1'

exposing server methods


  var curate = require('curate'),
      db = require('mong')('localhost/db');

  var User = module.exports = function(attrs) {
    this.username = attrs.username;
    this.password = attrs.password;
    this.email = attrs.email;

  User.allUsers = function(cb) {
    db.get('users').find({}, cb);

  curate('users/all', User.allUsers);

You can now visit http://localhost/api/v1/users/all and get JSON of the users returned by the User.allUsers query.

consuming the API

Curate also provides easy consumption of the generated API.


var curate = require('curate');

var User = module.exports = function() {

User.allUsers = curate('users/all', User);

This maps the client-side User.allUsers to hit /api/v1/users/all and use the resulting JSON in a callback. The resulting function has the same fingerprint as the server-side function. It expects a cb(err, results) for its argument.

The second argument passes the JSON returned into a constructor. ie. Instead of passing just JSON in, it will pass the JSON to the constructor to make full-fledged objects.

Filtering results

Sometimes you don't want the raw-db exposed to the client. For this, you can specify the filter method in the app.js

For example:

var app = express(),
    curate = require('curate');

curate.app = app;
curate.filterMethod = 'filter';

Now, if an instance has a method named filter it will call it and only pass the results of that method into the exposed API.