Skip to content

Commit 1002d3f

Browse files
authored
feat(server): add custom HTTP headers into error response (nuxt#7214)
1 parent 73541a5 commit 1002d3f

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

packages/server/src/middleware/error.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ export default ({ resources, options }) => async function errorMiddleware (err,
1010
const error = {
1111
statusCode: err.statusCode || 500,
1212
message: err.message || 'Nuxt Server Error',
13-
name: !err.name || err.name === 'Error' ? 'NuxtServerError' : err.name
13+
name: !err.name || err.name === 'Error' ? 'NuxtServerError' : err.name,
14+
headers: err.headers
1415
}
1516

1617
const sendResponse = (content, type = 'text/html') => {
@@ -21,6 +22,13 @@ export default ({ resources, options }) => async function errorMiddleware (err,
2122
res.setHeader('Content-Length', Buffer.byteLength(content))
2223
res.setHeader('Cache-Control', 'no-cache, no-store, max-age=0, must-revalidate')
2324

25+
// Error headers
26+
if (error.headers) {
27+
for (const name in error.headers) {
28+
res.setHeader(name, error.headers[name])
29+
}
30+
}
31+
2432
// Send Response
2533
res.end(content, 'utf-8')
2634
}

packages/server/test/middleware/error.test.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,19 @@ describe('server: errorMiddleware', () => {
4949
const params = createParams()
5050
const errorMiddleware = createErrorMiddleware(params)
5151
const error = new Error()
52+
error.headers = { 'Custom-Header': 'test' }
5253
const ctx = createServerContext()
5354

5455
await errorMiddleware(error, ctx.req, ctx.res, ctx.next)
5556

5657
expect(consola.error).toBeCalledWith(error)
5758
expect(ctx.res.statusCode).toEqual(500)
5859
expect(ctx.res.statusMessage).toEqual('NuxtServerError')
59-
expect(ctx.res.setHeader).toBeCalledTimes(3)
60+
expect(ctx.res.setHeader).toBeCalledTimes(4)
6061
expect(ctx.res.setHeader).nthCalledWith(1, 'Content-Type', 'text/html; charset=utf-8')
6162
expect(ctx.res.setHeader).nthCalledWith(2, 'Content-Length', Buffer.byteLength('error template'))
6263
expect(ctx.res.setHeader).nthCalledWith(3, 'Cache-Control', 'no-cache, no-store, max-age=0, must-revalidate')
64+
expect(ctx.res.setHeader).nthCalledWith(4, 'Custom-Header', 'test')
6365
expect(params.resources.errorTemplate).toBeCalledTimes(1)
6466
expect(params.resources.errorTemplate).toBeCalledWith({
6567
status: 500,

0 commit comments

Comments
 (0)