@@ -10,24 +10,36 @@ export * from './queryParser'
10
10
import express from 'express'
11
11
import bodyParser from 'body-parser'
12
12
13
- function makeHandler ( handler ) {
13
+ function makeHandler ( handler , extendedHandlers ) {
14
14
return function ( req , res , next ) {
15
- return utils . resolve ( )
16
- . then ( function ( ) {
17
- return handler ( req )
18
- } )
19
- . then ( function ( result ) {
20
- res . status ( 200 )
21
- if ( ! utils . isUndefined ( result ) ) {
22
- res . send ( result )
23
- }
24
- res . end ( )
25
- } )
26
- . catch ( next )
15
+ return utils . resolve ( ) . then ( function ( ) {
16
+ if ( extendedHandlers && extendedHandlers . req ) {
17
+ return new Promise ( ( resolve ) => {
18
+ extendedHandlers . req ( req , res , resolve )
19
+ } )
20
+ . then ( ( ) => { return handler ( req ) } )
21
+ . catch ( next )
22
+ } else if ( extendedHandlers === false ) {
23
+ return utils . reject ( )
24
+ }
25
+
26
+ return handler ( req )
27
+ } )
28
+ . then ( function ( result ) {
29
+ res . status ( 200 )
30
+
31
+ if ( extendedHandlers && extendedHandlers . res ) {
32
+ return extendedHandlers . res ( result , req , res , next )
33
+ } else if ( ! utils . isUndefined ( result ) ) {
34
+ res . send ( result )
35
+ }
36
+ res . end ( )
37
+ } )
38
+ . catch ( next )
27
39
}
28
40
}
29
41
30
- export function Router ( component ) {
42
+ export function Router ( component , extendedHandlers = { } ) {
31
43
if ( ! ( component instanceof Mapper ) && ! ( component instanceof Container ) ) {
32
44
throw new Error ( 'You must provide an instance of JSData.Container, JSData.DataStore, or JSData.Mapper!' )
33
45
}
@@ -38,6 +50,10 @@ export function Router (component) {
38
50
extended : true
39
51
} ) )
40
52
53
+ if ( extendedHandlers . middleware && typeof extendedHandlers . middleware === 'function' ) {
54
+ router . use ( extendedHandlers . middleware )
55
+ }
56
+
41
57
if ( component instanceof Container ) {
42
58
utils . forOwn ( component . _mappers , ( mapper , name ) => {
43
59
router . use ( `/${ mapper . endpoint || name } ` , new Router ( mapper ) . router )
@@ -47,39 +63,39 @@ export function Router (component) {
47
63
// GET /:resource
48
64
. get ( makeHandler ( function ( req ) {
49
65
return component . findAll ( req . query , req . jsdataOpts )
50
- } ) )
66
+ } , extendedHandlers . findAll ) )
51
67
// POST /:resource
52
68
. post ( makeHandler ( function ( req ) {
53
69
if ( utils . isArray ( req . body ) ) {
54
70
return component . createMany ( req . body , req . jsdataOpts )
55
71
}
56
72
return component . create ( req . body , req . jsdataOpts )
57
- } ) )
73
+ } , extendedHandlers . create ) )
58
74
// PUT /:resource
59
75
. put ( makeHandler ( function ( req ) {
60
76
if ( utils . isArray ( req . body ) ) {
61
77
return component . updateMany ( req . body , req . jsdataOpts )
62
78
}
63
79
return component . updateAll ( req . body , req . query , req . jsdataOpts )
64
- } ) )
80
+ } , extendedHandlers . updateAll ) )
65
81
// DELETE /:resource
66
82
. delete ( makeHandler ( function ( req ) {
67
83
return component . destroyAll ( req . query , req . jsdataOpts )
68
- } ) )
84
+ } , extendedHandlers . destroyAll ) )
69
85
70
86
router . route ( '/:id' )
71
87
// GET /:resource/:id
72
88
. get ( makeHandler ( function ( req ) {
73
89
return component . find ( req . params . id , req . jsdataOpts )
74
- } ) )
90
+ } , extendedHandlers . find ) )
75
91
// PUT /:resource/:id
76
92
. put ( makeHandler ( function ( req ) {
77
93
return component . update ( req . params . id , req . body , req . jsdataOpts )
78
- } ) )
94
+ } , extendedHandlers . update ) )
79
95
// DELETE /:resource/:id
80
96
. delete ( makeHandler ( function ( req ) {
81
97
return component . destroy ( req . params . id , req . jsdataOpts )
82
- } ) )
98
+ } , extendedHandlers . destroy ) )
83
99
}
84
100
}
85
101
0 commit comments