Skip to content

Commit

Permalink
Check if server error already had its message updated (#46367)
Browse files Browse the repository at this point in the history
I haven't been able to reproduce this consistently. But sometimes it
seems that the same error instance is thrown, causing the additional
error info to be appended multiple times. This adds a check to see if
the error message already has been updated, and ignores it if that's the
case.

Example

![image](https://user-images.githubusercontent.com/25056922/221200780-4b7f4047-4e43-4ae2-9b6e-456b650cd091.png)


## Bug

- [ ] Related issues linked using `fixes #number`
- [ ] Integration tests added
- [ ] Errors have a helpful link attached, see
[`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md)

## Feature

- [ ] Implements an existing feature request or RFC. Make sure the
feature request has been accepted for implementation before opening a
PR.
- [ ] Related issues linked using `fixes #number`
- [ ]
[e2e](https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs)
tests added
- [ ] Documentation added
- [ ] Telemetry added. In case of a feature if it's used or not.
- [ ] Errors have a helpful link attached, see
[`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md)

## Documentation / Examples

- [ ] Make sure the linting passes by running `pnpm build && pnpm lint`
- [ ] The "examples guidelines" are followed from [our contributing
doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md)

---------

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
  • Loading branch information
hanneslund and kodiakhq[bot] committed Mar 1, 2023
1 parent 5acabf0 commit 9dfbe93
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 1 deletion.
30 changes: 30 additions & 0 deletions packages/next/src/lib/format-server-error.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { formatServerError } from './format-server-error'

describe('formatServerError', () => {
it('should not append message several times', () => {
const err = new Error(
'Class extends value undefined is not a constructor or null'
)

// Before
expect(err.message).toMatchInlineSnapshot(
`"Class extends value undefined is not a constructor or null"`
)

// After
formatServerError(err)
expect(err.message).toMatchInlineSnapshot(`
"Class extends value undefined is not a constructor or null
This might be caused by a React Class Component being rendered in a Server Component, React Class Components only works in Client Components. Read more: https://nextjs.org/docs/messages/class-component-in-server-component"
`)

// After second
formatServerError(err)
expect(err.message).toMatchInlineSnapshot(`
"Class extends value undefined is not a constructor or null
This might be caused by a React Class Component being rendered in a Server Component, React Class Components only works in Client Components. Read more: https://nextjs.org/docs/messages/class-component-in-server-component"
`)
})
})
8 changes: 7 additions & 1 deletion packages/next/src/lib/format-server-error.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,17 @@ export function formatServerError(error: Error): void {
'Class extends value undefined is not a constructor or null'
)
) {
const addedMessage =
'This might be caused by a React Class Component being rendered in a Server Component, React Class Components only works in Client Components. Read more: https://nextjs.org/docs/messages/class-component-in-server-component'

// If this error instance already has the message, don't add it again
if (error.message.includes(addedMessage)) return

setMessage(
error,
`${error.message}
This might be caused by a React Class Component being rendered in a Server Component, React Class Components only works in Client Components. Read more: https://nextjs.org/docs/messages/class-component-in-server-component`
${addedMessage}`
)
return
}
Expand Down

0 comments on commit 9dfbe93

Please sign in to comment.