era

REST adapter for express

era

REST adapter for express.

  • Current version: 0.0.3
  • Package under heavy modifications.
  • Authentication was disabled from version > 0.0.2.
  • Default behavior
$ npm install -g era

This package is intended for fast development of REST APIs.

var era = require('era');
 
var Api = era.Api;
var Authentication = era.Authentication;
var ModelResource = era.ModelResource;

Declare a new resource

function UserResource (modelauthentication) {
  ModelResource.call(this, model, authentication);
}
util.inherits(UserResource, ModelResource);

and a new api

var api = new Api('api', 'v1');

and register your new resource:

api.register(new UserResource(models.User, Authentication));

Now, for this resource you have working CRUD functionality and the urls /api/v1/user and /api/v1/user/:id are auto generated. The urls are base on the resource name, so the name has two parts, the model name, in our case is User and the word Resource, which is a mandatory word. If you want to change behavior of the resource you have to override get, post, put and delete methods.

The api object is the one we built before.

var express = require('express');
var app = express();
 
app.use(express.logger());
app.use(express.compress());
app.use(express.bodyParser());
app.use(app.router);
 
api.adapter(app);

Authentication have no rules so you'll have to extend it and implement isAuthenticated for setting your own rules.

Here is an example:

function ApiKeyAuth() {
  Authentication.call(this);
};
util.inherits(ApiKeyAuth, Authentication);
ApiKeyAuth.prototype.isAuthenticated = function (reqresnext) {
  var apikey = req.query.apikey;
  if (apikey) {
    models.User.findOne({'apikey': apikey}).exec(function(errobj) {
      if (obj) {
        next();
      }
      else {
        res.send(401);
      }
    });
  }
  else {
    res.send(401);
  }
}

The default CRUD behavior of the resource is built on top of mongoose. If you use something else you have to implement get, post, put and delete methods of your resource, so mongoose driver is not a requirement.

Everything you'll extend with era is a middleware for express.

MIT