Skip to content

Commit a528e43

Browse files
committed
handle promise-returning handlers
1 parent 9f6a6d0 commit a528e43

File tree

1 file changed

+33
-16
lines changed

1 file changed

+33
-16
lines changed

lib/serve.js

+33-16
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,36 @@ function handleErr(err, response) {
1313
return;
1414
}
1515

16+
function createCallback(response) {
17+
return function callback(err, lambdaResponse) {
18+
if (err) {
19+
return handleErr(err, response);
20+
}
21+
22+
response.statusCode = lambdaResponse.statusCode;
23+
for (const key in lambdaResponse.headers) {
24+
response.setHeader(key, lambdaResponse.headers[key]);
25+
}
26+
response.write(
27+
lambdaResponse.isBase64Encoded
28+
? base64.decode(lambdaResponse.body)
29+
: lambdaResponse.body
30+
);
31+
response.end();
32+
}
33+
}
34+
35+
function promiseCallback(promise, callback) {
36+
if (!promise) return;
37+
if (typeof promise.then !== 'function') return;
38+
if (typeof callback !== 'function') return;
39+
40+
promise.then(
41+
function(data) {callback(null, data)},
42+
function(err) {callback(err, null)}
43+
);
44+
}
45+
1646
function createHandler(dir) {
1747
return function(request, response) {
1848
var func = request.path.split("/").filter(function(e) {
@@ -39,22 +69,9 @@ function createHandler(dir) {
3969
isBase64Encoded: isBase64
4070
};
4171

42-
handler.handler(lambdaRequest, {}, function(err, lambdaResponse) {
43-
if (err) {
44-
return handleErr(err, response);
45-
}
46-
47-
response.statusCode = lambdaResponse.statusCode;
48-
for (const key in lambdaResponse.headers) {
49-
response.setHeader(key, lambdaResponse.headers[key]);
50-
}
51-
response.write(
52-
lambdaResponse.isBase64Encoded
53-
? base64.decode(lambdaResponse.body)
54-
: lambdaResponse.body
55-
);
56-
response.end();
57-
});
72+
var callback = createCallback(response);
73+
var promise = handler.handler(lambdaRequest, {}, callback);
74+
promiseCallback(promise, callback);
5875
};
5976
}
6077

0 commit comments

Comments
 (0)