@@ -8,6 +8,21 @@ const tinyParams = require('tiny-params')
88const zlib = require ( 'zlib' )
99const port = process . env . PORT || process . env . port || 8091
1010const defaultTimeout = 120000
11+ const noop = ( ) => { }
12+ const dummyRes = {
13+ addTrailers : noop ,
14+ end : noop ,
15+ getHeader : noop ,
16+ getHeaderNames : noop ,
17+ getHeaders : noop ,
18+ hasHeader : noop ,
19+ removeHeader : noop ,
20+ setHeader : noop ,
21+ setTimeout : noop ,
22+ write : noop ,
23+ writeContinue : noop ,
24+ writeHead : noop
25+ }
1126const scrud = {
1227 GET : 'search' ,
1328 'GET?' : 'search' ,
@@ -122,15 +137,16 @@ module.exports = {
122137 genToken,
123138 authenticate,
124139 find,
125- read : find ,
126140 findAll,
127- search : findAll ,
128- create,
141+ insert : create ,
129142 save,
130- update : save ,
131143 destroy,
132- delete : destroy ,
133- callPgFunc
144+ callPgFunc,
145+ read : ( rsrc , req ) => actionHandler ( req , null , rsrc , 'read' , true ) ,
146+ create : ( rsrc , req ) => actionHandler ( req , null , rsrc , 'create' , true ) ,
147+ search : ( rsrc , req ) => actionHandler ( req , null , rsrc , 'search' , true ) ,
148+ update : ( rsrc , req ) => actionHandler ( req , null , rsrc , 'update' , true ) ,
149+ delete : ( rsrc , req ) => actionHandler ( req , null , rsrc , 'delete' , true )
134150}
135151
136152// register resource
@@ -196,13 +212,12 @@ function handleRequest (req, res) {
196212 let connection = req . connection || { }
197213 req . params . ip = headers [ 'x-forwarded-for' ] || connection . remoteAddress
198214 req . once ( 'error' , ( err ) => sendErr ( res , err ) )
199- let handler = resource [ action ] || actionHandler
200215 let jwt = ( headers . authorization || '' ) . replace ( / ^ B e a r e r \s / , '' )
201216 let callHandler = ( ) => {
202- if ( ! hasBody [ action ] ) return handler ( req , res , name , action )
217+ if ( ! hasBody [ action ] ) return actionHandler ( req , res , name , action )
203218 return bodyParse ( req ) . then ( ( body ) => {
204219 req . params = Object . assign ( body , req . params )
205- return handler ( req , res , name , action )
220+ return actionHandler ( req , res , name , action )
206221 } ) . catch ( ( e ) => sendErr ( res , e ) )
207222 }
208223 if ( resource . skipAuth && resource . skipAuth [ action ] ) return callHandler ( )
@@ -320,14 +335,20 @@ function pgActions (resource, action, req) {
320335}
321336
322337// default handler for all resource methods
323- function actionHandler ( req , res , name , action ) {
324- let bq = resources [ name ] . beforeQuery || { } // (req, res)
338+ function actionHandler ( req , res , name , action , skipRes ) {
339+ let rsrc = resources [ name ]
340+ res = res || dummyRes
341+ let bq = rsrc . beforeQuery || { } // (req, res)
325342 if ( typeof bq !== 'function' ) bq = bq [ action ]
326- let bs = resources [ name ] . beforeSend || { } // (req, res, data)
343+ let bs = rsrc . beforeSend || { } // (req, res, data)
327344 if ( typeof bs !== 'function' ) bs = bs [ action ]
328- let act = ( ) => handlers [ action ] ( name , req )
329- let send = ( d ) => sendData ( res , d )
345+ let act = ( ) => rsrc [ action ]
346+ ? rsrc [ action ] ( req , res , name , action , skipRes )
347+ : handlers [ action ] ( name , req )
348+ if ( rsrc [ action ] ) return bq ? bq ( req , res ) . then ( act ) : act ( )
349+ let send = ( d ) => skipRes ? Promise . resolve ( d ) : sendData ( res , d )
330350 let finish = ( d ) => bs ? bs ( req , res , d ) . then ( send ) : send ( d )
331351 let run = ( ) => bq ? bq ( req , res ) . then ( act ) . then ( finish ) : act ( ) . then ( finish )
332- return run ( ) . catch ( ( e ) => sendErr ( res , e ) )
352+ let handleErr = ( e ) => skipRes ? Promise . reject ( e ) : sendErr ( res , e )
353+ return run ( ) . catch ( handleErr )
333354}
0 commit comments