@@ -42,12 +42,52 @@ export class Server {
42
42
}
43
43
44
44
private routeLambdas ( ) : void {
45
- this . express . all ( "/.netlify/functions/* " , this . handleLambda ( ) ) ;
45
+ this . express . all ( "/.netlify/functions/:lambda " , this . handleLambda ( ) ) ;
46
46
}
47
47
48
48
private handleLambda ( ) : express . Handler {
49
49
return ( request , response , next ) => {
50
- response . status ( 200 ) . json ( "lambda!" ) ;
50
+
51
+ const module = path . join ( this . paths . lambda , request . params . lambda ) ;
52
+ delete require . cache [ require . resolve ( module ) ] ;
53
+
54
+ let lambda : any ;
55
+ try {
56
+ lambda = require ( module ) ;
57
+ } catch ( error ) {
58
+
59
+ return response . status ( 500 ) . json ( `Function invocation failed: ${ error . toString ( ) } ` ) ;
60
+ }
61
+
62
+ const lambdaRequest = {
63
+ path : request . path ,
64
+ httpMethod : request . method ,
65
+ queryStringParameters : request . query ,
66
+ headers : request . headers ,
67
+ body : request . body ,
68
+ isBase64Encoded : false ,
69
+ }
70
+
71
+ lambda . handler ( lambdaRequest , { } , Server . lambdaCallback ( response ) ) ;
72
+ }
73
+ }
74
+
75
+ static lambdaCallback ( response : express . Response ) : any {
76
+ return ( error : Error , lambdaResponse : any ) => {
77
+ if ( error ) {
78
+
79
+ return response . status ( 500 ) . json ( `Function invocation failed: ${ error . toString ( ) } ` ) ;
80
+ }
81
+
82
+ response . statusCode = lambdaResponse . statusCode ;
83
+
84
+ for ( const key in lambdaResponse . headers ) {
85
+ response . setHeader ( key , lambdaResponse . headers [ key ] ) ;
86
+ }
87
+
88
+ response . write ( lambdaResponse . body ) ;
89
+
90
+ response . end ( ) ;
51
91
}
52
92
}
53
93
0 commit comments