1
1
const express = require ( 'express' ) ;
2
2
const url = require ( 'url' ) ;
3
3
const expressBodyParser = require ( 'body-parser' ) ;
4
- const { DEFAULT_PARSER_OPTIONS } = require ( '../utility/body_parser' ) ;
5
- const { getControllerFiles, getControllerMiddleware, controllerMappingServerSide } = require ( '../utility/controllers' ) ;
4
+ const { DEFAULT_PARSER_OPTIONS } = require ( '../utility/body_parser' ) ;
5
+ const { getControllerFiles, getControllerMiddleware, middlewareHandler , controllerMappingServerSide } = require ( '../utility/controllers' ) ;
6
6
7
7
/**
8
8
* Action handler middleware.
9
9
*
10
10
* @param ControllerClass
11
- * @param methodName
11
+ * @param actionName
12
12
* @param options
13
13
* @returns {Function }
14
14
*/
15
- function actionHandler ( ControllerClass , methodName , options ) {
15
+ function actionHandler ( ControllerClass , actionName , options ) {
16
16
return function ( req , res , next ) {
17
17
const controller = new ControllerClass ( req ) ;
18
18
19
- return Promise . resolve ( controller [ methodName ] ( { params : req . params , body : req . body , query : req . query } ) )
19
+ return Promise . resolve ( controller [ actionName ] ( { params : req . params , body : req . body , query : req . query } ) )
20
20
. then ( function ( result ) {
21
21
res . result = options . successHandler ( result , req ) ;
22
22
next ( ) ;
@@ -37,16 +37,20 @@ function createControllerRouter(controllerFile, options) {
37
37
const ControllerClass = require ( controllerFile ) ;
38
38
const routes = ControllerClass . ROUTES || { } ;
39
39
40
- Object . keys ( routes ) . forEach ( function ( methodName ) {
41
- if ( ControllerClass . prototype [ methodName ] ) {
42
- const { path, verb} = routes [ methodName ] ;
40
+ Object . keys ( routes ) . forEach ( function ( actionName ) {
41
+ if ( ControllerClass . prototype [ actionName ] ) {
42
+ const { path, verb} = routes [ actionName ] ;
43
43
const controllerMiddleware = getControllerMiddleware ( ControllerClass ) ;
44
44
45
45
router [ verb . toLowerCase ( ) ] (
46
46
path ,
47
- ...controllerMiddleware . all , // Controller middleware for all actions
48
- ...( controllerMiddleware . actions && controllerMiddleware . actions [ methodName ] || [ ] ) , // Action only middleware
49
- actionHandler ( ControllerClass , methodName , options ) // Handle controller action method.
47
+ function ( req , res , next ) {
48
+ return middlewareHandler ( controllerMiddleware . all , req )
49
+ . then ( ( ) => middlewareHandler ( controllerMiddleware . actions && controllerMiddleware . actions [ actionName ] || [ ] , req ) )
50
+ . then ( ( ) => next ( ) )
51
+ . catch ( next ) ;
52
+ } ,
53
+ actionHandler ( ControllerClass , actionName , options ) // Handle controller action method.
50
54
) ;
51
55
}
52
56
} ) ;
@@ -122,7 +126,11 @@ function injectAPI(options) {
122
126
123
127
// Middleware for all API routes
124
128
if ( options . middleware ) {
125
- router . use ( ...( Array . isArray ( options . middleware ) ? options . middleware : [ options . middleware ] ) ) ;
129
+ router . use ( function ( req , res , next ) {
130
+ return middlewareHandler ( options . middleware , req )
131
+ . then ( ( ) => next ( ) )
132
+ . catch ( next ) ;
133
+ } ) ;
126
134
}
127
135
128
136
// Inject Controller routes
0 commit comments