Skip to content

adrianhelvik/resource-pebble

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

This module is made to simplify rest API creation. Supply the constructor with a mongoose model and an express router is generated from the plural name of the model. Given a model named Article, app.use(resource(Article)) will generate all the routes listed below. (With no authentication).

Controller to route relation

(models being the lowercase plural form of the given model name)

  • show: GET /models/:id
  • all: GET /models
  • create: POST /models
  • update: PUT /models/:id
  • destroy: DELETE /models/:id

Dependencies

  • body-parser or similar middleware

API

app.use(resourcePebble(Model:mongoose Model, [options:object]))

options.controller: class(Model: mongoose model)|function(Model:mongoose model)

Swap out the default controller with another controller. The constructor should accept a Model parameter, which is the model that will be used in the controller.

options.middleware

Example usage

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var resourcePebble = require('resource-pebble')

// body-parser or a similar middleware is required
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// Find a mongoose model for the resource
Article = require('./models/article');

var authMiddleware = require('./middleware/auth');

app.use(resourcePebble(Article), {

    // Optionally register middleware for routes
    middleware: {
        'create': authMiddleware,
        'update': authMiddleware
    },

    // Optionally restrict the number of methods to use
    only: ['show', 'create', 'update']
});

Responses

The default responses are on the form:

{
    "status": Number,
    "success": Boolean,
    "data": ANY
}

The responses can be changed by extending the express response object with a provide method. I am planning to develop response provider middleware for express. The functionality required for this is enabled in this module. To enable custom throughout your app you can use the stripped down implementation specified below.

Response API

Note: This is not enabled by by default, but will be used if available.

res.provide(responseType:String, data: ANY)

Stripped down implementation

var providers = {}; // Holds your response functions

function responseProvider(req, res, next) {
    res.provide = function (name, data) {
        var provider = providers[name](data);
        res.status(provider.status || 500);
        res.json(provider.data);
    }
    next();
}

app.use(responseProvider);

responses.error = function (data) {
    if (! process.env.DEBUG)
        data = null
    return {
        status: 500,
        data: data
    };
}

Required responses

  • error
  • success
  • created

TODO

Default controller

  • Create resource not found response for show-route
  • Create nested resources
    • If model contains references to other models, create nested resources recursively
    • one -> many
      • create all endpoints
    • one -> one
      • create update and destroy endpoints

Resource pebble

  • Create tests for middleware
  • Enable multiple methods per middleware (as in middleware: { 'create update': authMiddleware })

Misc.

  • Create response provider module

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published