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).
(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
- body-parser or similar middleware
app.use(resourcePebble(Model:mongoose Model, [options:object]))
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.
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']
});
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.
Note: This is not enabled by by default, but will be used if available.
res.provide(responseType:String, data: ANY)
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
};
}
- error
- success
- created
- 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
- Create tests for middleware
- Enable multiple methods per middleware (as in
middleware: { 'create update': authMiddleware }
)
- Create response provider module