Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
scripts made useExpressApiMiddleware to return express object, upgraded relea…
tests added Backbone.Model sugar
.gitignore initial implementation, work still in progress but seems that it works
ActionResponse.js fixes on BackboneMongo models
Actions.js initial implementation, work still in progress but seems that it works
BackboneMongo.js update/fix to BackboneMongo annonymous callback support updated readme
index.js CORS fixed
package.json 0.0.10 release


Helper node.js module for expressjs applications usable when building http APIs.


  • Backbone Models wired to MongoDB
  • MongoDB session support using connect-mongo for express apps
  • Actions(http request & response handlers)


add in package.json dependency to "expressApi". then create app.js file with the following:

var app = require("expressApi");

  app.useExpressApiMiddleware("databaseName", "cookieSecret");


app.listen(8000, function(){
  console.log("server started");

in ./actions/echoActions.js place actions routes and handlers as follows:

var Actions = require("expressApi/Actions");

var EchoActions = module.exports = Actions.extend({
  root: "/",

  "POST /echo": function(req, res, next) {},
  "GET /echo/:id": function(req, res, next) {},

to create a Model just place standard Backbone.Model implementation like follows:

var Backbone = require("expressApi/BackboneMongo");

var MyModel = module.exports = Backbone.Model.extend({
  collectionName: "myCollection",
  defaults: {},
  initialize: function(){}
  staticMethod: function(){;

to use Model follow Backbone:

var MyModel = require("MyModel");
var instance = new MyModel({ property1: "value1" });

// passing 'null' as first argument should notify Backbone to store all properties, model){
  // if there isn't error model == instance, otherwise err is not null



  • useExpressApiMiddleware(databaseName, cookieSecret)
  • addActions({} or ActionsClass)


  • save(attributes, options) or save(function(err, model){ ... }); or save(attributes, function(err, model){ ... })
  • destroy(options) or destroy(function(err, model){ ... });
  • fetch(options) or fetch(function(err, model){ ... });



var MyActions = Actions.extend({
  root: "/somePath",

  response: function(res) {
    // modify express' res object before calling any action

  request: function(req) {
    // modify express' req object before calling any action

  routes: {
    "GET /path": "myMethod",
    "POST /path": "myMethod",
    "DELETE /path": function(req, res, next) {
      // req & res objects are already modified here

  myMethod: function(req, res, next) {
    // req & res objects are already modified here

  "PUT /pathMe": function(req, res, next) {
    // the full path to this action is /somePath/pathMe accordingly to root

  "GET /pathMe/:helloParam": function(req, res, next) {},

  "GET /pathMe2/:helloParam": [
    function(req, res, next) {
      // as before req & res objects are already modified,
      // and this method will be invoked first accordingly the array
      next(); // call next to invoke the next method ;)
    function(req, res, next) {
      // this will be invoked second accordingly to the array
Something went wrong with that request. Please try again.