Skip to content

camplight/expressApi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

7e41b6c · Aug 9, 2012

History

59 Commits
Jun 26, 2012
Jun 25, 2012
Jun 6, 2012
Jun 5, 2012
Jun 6, 2012
Jun 5, 2012
Jun 14, 2012
Jun 6, 2012
Aug 9, 2012
Aug 9, 2012

Repository files navigation

expressApi

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

Contains:

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

Usage

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

var app = require("expressApi");

app.configure(function(){
  app.useExpressApiMiddleware("databaseName", "cookieSecret");
});

app.addActions(require("./actions/echoActions.js"));

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(){
    MyModel.store().find(...);
  }
});

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
instance.save(function(err, model){
  // if there isn't error model == instance, otherwise err is not null
});

Reference

expressApi

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

BackboneMongo.Model

  • 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){ ... });

BackboneMongo.Collection

Actions

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
      res.result(true);
    }
  ]
})

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published