Skip to content

camplight/expressApi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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