Declarative Express Application Wiring
express-jefferson is a library for declaratively describing RESTful services and configuring express apps.
// main.js
var express = require('express'),
jefferson = require('express-jefferson'),
app = express(),
conf = {
proxies: [logInvocations, resolvePromises],
pre: {
safe: [markReadOnly],
unsafe: [authenticate]
},
post: {
all: [addHaetoasLinks, transmitResponse]
},
params: {
beerId: getBeerById,
userId: getUserById
},
routes: {
'/beers': {
get: [getBeerList, send.json]
post: [createBeer, send.json]
},
'/beers/:beerId':
get: [send.json]
put: [editBeer, send.json]
}
}
};
jefferson(app, conf);
routes: {
{
'/my-path': {
get: [getThings, send]
post: [makeThing, send]
},
'/my-path/:id': {
get: [getThing, send]
}
}
}
aliases: {
'processAndTransmit': [deletePassword, addHateoasLinks, transmitEntity]
},
routes: {
'/users/:id': {
get: [getUser, 'processAndTransmit']
}
}
params: {
userId: (req, res, next) => {
req.user = userStore.findUser(req.params.userId);
next();
}
}
routes: {
'/users/:userId': {
get: [(req, res, next) => res.send(req.user)]
}
}
enable: ['trust proxy', 'etag']
disable: ['trust proxy', 'etag']
{ <extension>: <engineFunction> }
engines: {
'jade': require('jade').__express
}
{ <localName>: <localValue> }
locals: {
'a': true
}
{ <settingName>: <settingValue> }
settings: {
'a': true
}
pre: {
all: [trackInvocation],
unsafe: [authenticate],
method: {
get: [markRequestReadOnly]
}
}
{
name: 'Logger',
init (delegate) {
return (req, res, next) => {
console.log("invoking middleware function");
delegate(req, res, next);
}
}
}
require('express-jefferson/proxies/promise-handler')
This proxy accepts promise-based middleware (middleware that accepts two arguments) and wraps them in a promise chain before invoking next().
require('express-jefferson/proxies/trace-logger')
This proxy logs invocations of middleware using the debug library.