Skip to content

Commit e7a58e6

Browse files
committed
💫 added dumb lambda handling netlify/netlify-lambda#28
1 parent dbef54a commit e7a58e6

File tree

1 file changed

+42
-2
lines changed

1 file changed

+42
-2
lines changed

‎src/ts/server.ts

+42-2
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,52 @@ export class Server {
4242
}
4343

4444
private routeLambdas (): void {
45-
this.express.all("/.netlify/functions/*", this.handleLambda());
45+
this.express.all("/.netlify/functions/:lambda", this.handleLambda());
4646
}
4747

4848
private handleLambda (): express.Handler {
4949
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();
5191
}
5292
}
5393

0 commit comments

Comments
 (0)