From 1e4372c62763d92914dc1ef56f90c1329d035a82 Mon Sep 17 00:00:00 2001 From: JJ Kasper <22380829+ijjk@users.noreply.github.com> Date: Wed, 13 Mar 2019 13:39:05 -0500 Subject: [PATCH] Show a better error when someone throws undefined (#6646) * Show a better error when someone throws undefined * Update error wording Co-Authored-By: ijjk <22380829+ijjk@users.noreply.github.com> * Update error wording in test Co-Authored-By: ijjk <22380829+ijjk@users.noreply.github.com> * Update test and add check for statusCode before updating error --- package.json | 3 ++- packages/next-server/server/next-server.ts | 2 +- packages/next/server/next-dev-server.js | 4 ++++ test/integration/basic/pages/throw-undefined.js | 11 +++++++++++ test/integration/basic/test/rendering.js | 5 +++++ 5 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 test/integration/basic/pages/throw-undefined.js diff --git a/package.json b/package.json index 7b6c6834a9..805863ea40 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,8 @@ "packages/next/build/webpack/plugins/terser-webpack-plugin/**", "examples/with-ioc/**", "examples/with-kea/**", - "examples/with-mobx/**" + "examples/with-mobx/**", + "test/integration/basic/pages/throw-undefined.js" ] }, "devDependencies": { diff --git a/packages/next-server/server/next-server.ts b/packages/next-server/server/next-server.ts index 4c3c2496a3..01a2b272b6 100644 --- a/packages/next-server/server/next-server.ts +++ b/packages/next-server/server/next-server.ts @@ -307,7 +307,7 @@ export default class Server { ) return html } catch (err) { - if (err.code === 'ENOENT') { + if (err && err.code === 'ENOENT') { res.statusCode = 404 return this.renderErrorToHTML(null, req, res, pathname, query) } else { diff --git a/packages/next/server/next-dev-server.js b/packages/next/server/next-dev-server.js index 1ac2130d2e..bacb476b60 100644 --- a/packages/next/server/next-dev-server.js +++ b/packages/next/server/next-dev-server.js @@ -120,6 +120,10 @@ export default class DevServer extends Server { return super.renderErrorToHTML(compilationErr, req, res, pathname, query) } + if (!err && res.statusCode === 500) { + err = new Error('An undefined error was thrown sometime during render...') + } + try { const out = await super.renderErrorToHTML(err, req, res, pathname, query) return out diff --git a/test/integration/basic/pages/throw-undefined.js b/test/integration/basic/pages/throw-undefined.js new file mode 100644 index 0000000000..6309859fb7 --- /dev/null +++ b/test/integration/basic/pages/throw-undefined.js @@ -0,0 +1,11 @@ +function ThrowUndefined (props) { + return ( +
throw-undefined
+ ) +} + +ThrowUndefined.getInitialProps = () => { + throw undefined +} + +export default ThrowUndefined \ No newline at end of file diff --git a/test/integration/basic/test/rendering.js b/test/integration/basic/test/rendering.js index 43cbf11878..65f9a9130b 100644 --- a/test/integration/basic/test/rendering.js +++ b/test/integration/basic/test/rendering.js @@ -289,5 +289,10 @@ export default function ({ app }, suiteName, render, fetch) { expect($('#asPath').text()).toBe('Current asPath: /nav/with-hoc') }) }) + + it('should show a valid error when undefined is thrown', async () => { + const $ = await get$('/throw-undefined') + expect($('body').text()).toMatch('An undefined error was thrown sometime during render...') + }) }) }