Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions lib/router/sequential.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,13 @@ const DEFAULT_ROUTE = (req, res) => {

const DEFAULT_ERROR_HANDLER = (err, req, res) => {
res.statusCode = 500
if (process.env.NODE_ENV === 'production') {
res.end('Internal Server Error')
} else {
res.setHeader('Content-Type', 'text/plain')
// Safe by default: only expose error details in explicit development mode.
// Production, staging, testing, and unset NODE_ENV all receive sanitized response.
if (process.env.NODE_ENV === 'development') {
res.end(err.message)
} else {
res.end('Internal Server Error')
}
}

Expand Down
2 changes: 1 addition & 1 deletion tests/nested-routers.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ describe('0http - Nested Routers', () => {
.get('/r2/rolando/throw')
.expect(500)
.then((response) => {
expect(response.text).to.equals('nested error')
expect(response.text).to.equals('Internal Server Error')
})
})

Expand Down
2 changes: 1 addition & 1 deletion tests/router-coverage.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ describe('0http - Router Coverage', () => {
.get('/error')
.expect(500)
.then((response) => {
expect(response.text).to.equal('Intentional error')
expect(response.text).to.equal('Internal Server Error')
})
})

Expand Down
14 changes: 14 additions & 0 deletions tests/v4.4.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,20 @@ describe('v4.4 Improvements', () => {
.expect('Internal Server Error')
})

it('should hide error message when NODE_ENV is unset', async () => {
delete process.env.NODE_ENV
const { router, server } = cero()

router.get('/error', (req, res, next) => {
next(new Error('Sensitive Info'))
})

await request(server)
.get('/error')
.expect(500)
.expect('Internal Server Error')
})

it('should show error message in development', async () => {
process.env.NODE_ENV = 'development'
const { router, server } = cero()
Expand Down
Loading
Loading