Skip to content

Commit

Permalink
fix(nextjs): move notify logic in _error.js
Browse files Browse the repository at this point in the history
  • Loading branch information
subzero10 committed Apr 14, 2023
1 parent c123306 commit 0179ec4
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 31 deletions.
21 changes: 0 additions & 21 deletions packages/nextjs/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,24 +168,3 @@ export function setupHoneybadger(config, honeybadgerNextJsConfig: HoneybadgerNex
webpack: mergeWithExistingWebpackConfig(config.webpack, honeybadgerNextJsConfig)
}
}

export async function notifyFromNextErrorComponent(contextData) {
const { req, res, err } = contextData;

// exclude 40x except when this component is rendered from a routing error or a custom server
// https://nextjs.org/docs/advanced-features/custom-error-page#caveats
const statusCode = (res && res.statusCode) || contextData.statusCode;
if (statusCode && statusCode < 500) {
Honeybadger.config.logger.debug(`_error.js skipping because statusCode is ${statusCode}`);
return Promise.resolve();
}

await Honeybadger.notifyAsync(err || `_error.js called with falsy error (${err})`, {
context:
{
url: req.url,
method: req.method,
statusCode: res.statusCode,
}
});
}
35 changes: 25 additions & 10 deletions packages/nextjs/templates/_error.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
// eslint-disable-next-line import/no-unresolved
import { notifyFromNextErrorComponent } from '@honeybadger-io/nextjs';
import NextErrorComponent from 'next/error';

import NextErrorComponent from 'next/error'
import { Honeybadger } from '@honeybadger-io/react'
/**
* This component is called when:
* - on the server, when data fetching methods throw or reject
Expand All @@ -10,13 +8,30 @@ import NextErrorComponent from 'next/error';
* and was caught by the built-in Next.js error boundary
*/
const CustomErrorComponent = props => {
return <NextErrorComponent statusCode={props.statusCode} />;
};
return <NextErrorComponent statusCode={props.statusCode} />
}

CustomErrorComponent.getInitialProps = async contextData => {
await notifyFromNextErrorComponent(contextData);
const { req, res, err } = contextData

// exclude 40x except when this component is rendered from a routing error or a custom server
// https://nextjs.org/docs/advanced-features/custom-error-page#caveats
const statusCode = (res && res.statusCode) || contextData.statusCode;
if (statusCode && statusCode < 500) {
Honeybadger.config.logger.debug(`_error.js skipping because statusCode is ${statusCode}: ${req && req.url}`)
}
else {
await Honeybadger.notifyAsync(err || `_error.js called with falsy error (${err})`, {
context:
{
url: req.url,
method: req.method,
statusCode: res.statusCode,
}
})
}

return NextErrorComponent.getInitialProps(contextData);
};
return NextErrorComponent.getInitialProps(contextData)
}

export default CustomErrorComponent;
export default CustomErrorComponent

0 comments on commit 0179ec4

Please sign in to comment.