Skip to content

Commit 734c23c

Browse files
fix: gracefully handle errors when setting headers (#5411)
* fix: gracefully handle errors when setting headers * feat: show error page
1 parent 2aa9341 commit 734c23c

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

src/lib/functions/server.mjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ export const createHandler = function (options) {
168168
return
169169
}
170170

171-
handleSynchronousFunction(error, result, request, response)
171+
handleSynchronousFunction({ error, functionName: func.name, result, request, response })
172172
}
173173
}
174174
}

src/lib/functions/synchronous.mjs

+28-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// @ts-check
22
import { Buffer } from 'buffer'
33

4-
import { NETLIFYDEVERR } from '../../utils/command-helpers.mjs'
4+
import { chalk, log, NETLIFYDEVERR } from '../../utils/command-helpers.mjs'
55
import renderErrorTemplate from '../render-error-template.mjs'
66

77
import { detectAwsSdkError } from './utils.mjs'
@@ -16,27 +16,48 @@ const addHeaders = (headers, response) => {
1616
})
1717
}
1818

19-
export const handleSynchronousFunction = function (err, result, request, response) {
20-
if (err) {
21-
return handleErr(err, request, response)
19+
export const handleSynchronousFunction = function ({
20+
error: invocationError,
21+
functionName,
22+
request,
23+
response,
24+
result,
25+
}) {
26+
if (invocationError) {
27+
return handleErr(invocationError, request, response)
2228
}
2329

2430
const { error } = validateLambdaResponse(result)
2531
if (error) {
26-
console.log(`${NETLIFYDEVERR} ${error}`)
32+
log(`${NETLIFYDEVERR} ${error}`)
2733
return handleErr(error, request, response)
2834
}
2935

3036
response.statusCode = result.statusCode
31-
addHeaders(result.headers, response)
32-
addHeaders(result.multiValueHeaders, response)
37+
38+
try {
39+
addHeaders(result.headers, response)
40+
addHeaders(result.multiValueHeaders, response)
41+
} catch (headersError) {
42+
formatError(headersError)
43+
44+
log(`${NETLIFYDEVERR} Failed to set header in function ${chalk.yellow(functionName)}: ${headersError.message}`)
45+
46+
return handleErr(headersError, request, response)
47+
}
3348

3449
if (result.body) {
3550
response.write(result.isBase64Encoded ? Buffer.from(result.body, 'base64') : result.body)
3651
}
3752
response.end()
3853
}
3954

55+
const formatError = (err) => {
56+
err.errorType = err.code
57+
err.errorMessage = err.message
58+
err.stackTrace = err.trace
59+
}
60+
4061
const formatLambdaLocalError = (err, acceptsHtml) =>
4162
acceptsHtml
4263
? JSON.stringify({

0 commit comments

Comments
 (0)