From 88b724134ff07f4474c9c6c5758cb4a3a291a3ff Mon Sep 17 00:00:00 2001 From: Ashelyn Dawn Date: Sat, 30 Jan 2021 18:49:51 -0700 Subject: [PATCH] Don't leak error info --- pages/_app.js | 37 ++++++++++++++++++++++++++++++++----- pages/_error.js | 18 +----------------- 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/pages/_app.js b/pages/_app.js index 85250ae..f02efda 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -9,10 +9,22 @@ import Header from '~/components/header' import Footer from '~/components/footer' import AdminNav from '~/components/admin/nav' import ErrorBoundary from '~/components/errorBoundary' +import ErrorPage from '~/pages/_error' import "~/styles/layout.css" import 'react-infinite-calendar/styles.css' +const errorCodes = { + 404: { + name: 'Not Found', + message: `We couldn't find the item you're looking for. Sorry!` + }, + 500: { + name: 'Error', + message: `Our server encountered an unexpected error. Please try again.` + } +} + Layout.getInitialProps = async ({Component, ctx}) => { // Configure axios instance ctx.axios = axios.create({ @@ -43,16 +55,31 @@ Layout.getInitialProps = async ({Component, ctx}) => { const {data: cart} = await promises.cart let pageProps = {}; - if(Component.getInitialProps) - pageProps = await Component.getInitialProps({ctx, user}) + let error = null; + if(Component.getInitialProps) { + try { + pageProps = await Component.getInitialProps({ctx, user}) + } catch (err) { + if(err.status && errorCodes[err.status]) + error = errorCodes[err.status] + else + error = errorCodes[500] - return {pageProps, user, cart} + console.error(err) + } + } + + return {pageProps, error, user, cart} } -function Layout({ Component, pageProps, user, cart }){ +function Layout({ Component, pageProps, error, user, cart }){ const cartState = useState(cart) const userState = useState(user) + let page = error + ? + : + return ( <> @@ -63,7 +90,7 @@ function Layout({ Component, pageProps, user, cart }){
- + {page}