✈️ Express Marshal
A suite of decorators built to wire up express controllers
Install
$ npm install express express-marshal
Make sure you have decorators enabled through babel:
$ npm install --save-dev @babel/plugin-proposal-decorators
Add the plugin to your .babelrc:
{
"plugins": [
["@babel/plugin-proposal-decorators", { "legacy": true }]
]
}
Example
;; @ // Add route parameters @ { const user = UserService; if !user res; return; requser = user; ; } // Add route-specific middleware @ { res; } // Use the previously specified param @ { res; } // Validate user paylaods with Joi @ @ { res; } const app = const router = ;;app;app;
API
mount(router, [controllers])
-
####
router: Express#Router
An Express router
-
####
controllers: Array
Array of decorated controllers
;; const app = const router = ;;app;app;
@controller(basepath, middleware)
-
#####
basepath: String
The basepath will be prepended to all controller routes
-
#####
middleware: Array
optionalMiddleware to be run for every route on the controller
; @ ...
@route(method, path, middleware)
-
#####
method: String
The desired HTTP method (get, post, etc.)
-
#####
path: String
The endpoint to be appended to the parent controller's basepath
-
#####
middleware: Array
optionalArray of middleware only to be run for this route
Route Aliases
@get(path, middleware)
@post(path, middleware)
@put(path, middleware)
@patch(path, middleware)
@delete(path, middleware)
These are less verbose aliases for @route(method, path)
so you can use @get('/revoke')
instead of @route('get', '/revoke')
.
; @ @ { ... }
@validate(schema)
-
#####
schema: Object|Joi
A generic object containing Joi properties or a preconfigured Joi schema to validate an incoming payload against. A generic object will be converted to a Joi schema upon validation. A
GET
request will validate thereq.query
object while aPOST
request will validate thereq.query
object. Returns a 400 along with the Joi error if payload is invalid.
;; @ @ @ { ... }
Inspiration
- https://github.com/stewartml/express-decorators
- https://github.com/knownasilya/hapi-decorators
- https://github.com/serhiisol/node-decorators/tree/master/express
License
MIT © Kyle Alwyn