Skip to content

Commit cca195a

Browse files
authored
Merge pull request #552 from trojs/feature/fix-headers-send
Prevents setting headers multiple times
2 parents ace66ea + e0ac0ac commit cca195a

4 files changed

Lines changed: 23 additions & 9 deletions

File tree

src/handlers/not-found.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
export const notFound = (_context, request, response) => {
2-
response.status(404)
2+
if (!response.headersSent) {
3+
response.status(404)
4+
}
35
return {
46
status: 404,
57
timestamp: new Date(),

src/handlers/request-validation.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
export const requestValidation = (context, request, response) => {
2-
response.status(400)
2+
if (!response.headersSent) {
3+
response.status(400)
4+
}
35
return {
46
errors: context.validation.errors,
57
status: 400,

src/handlers/response-validation.js

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
export default (logger, validateResponse) => (context, request, response) => {
2+
// Prevent sending response if headers are already sent (e.g., after redirect)
3+
if (response.headersSent) {
4+
return undefined
5+
}
6+
27
const responseDoesntNeedValidation = response.statusCode >= 400
38
if (responseDoesntNeedValidation) {
49
return response.json(context.response)
@@ -22,12 +27,15 @@ export default (logger, validateResponse) => (context, request, response) => {
2227
response: context.response
2328
})
2429
}
25-
return response.status(502).json({
26-
errors: valid.errors,
27-
status: 502,
28-
timestamp: new Date(),
29-
message: 'Bad response'
30-
})
30+
if (!response.headersSent) {
31+
return response.status(502).json({
32+
errors: valid.errors,
33+
status: 502,
34+
timestamp: new Date(),
35+
message: 'Bad response'
36+
})
37+
}
38+
return undefined
3139
}
3240

3341
if (!context.response) {

src/handlers/unauthorized.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
export const unauthorized = async (context, request, response) => {
2-
response.status(401)
2+
if (!response.headersSent) {
3+
response.status(401)
4+
}
35
return {
46
status: 401,
57
timestamp: new Date(),

0 commit comments

Comments
 (0)