diff --git a/src/pages/500.tsx b/src/pages/500.tsx
new file mode 100644
index 00000000..f89f4d53
--- /dev/null
+++ b/src/pages/500.tsx
@@ -0,0 +1,7 @@
+import { NotFoundLayout } from '~/layouts/NotFoundLayout';
+
+const InternalServerErrorPage = () => {
+ return ;
+};
+
+export default InternalServerErrorPage;
diff --git a/src/pages/node/[id].tsx b/src/pages/node/[id].tsx
index f01d3de3..6c3e2675 100644
--- a/src/pages/node/[id].tsx
+++ b/src/pages/node/[id].tsx
@@ -1,7 +1,7 @@
import React, { FC } from 'react';
import { observer } from 'mobx-react-lite';
-import { InferGetStaticPropsType } from 'next';
+import { GetStaticPropsResult, InferGetStaticPropsType } from 'next';
import { RouteComponentProps } from 'react-router';
import { apiGetNode, getNodeDiff } from '~/api/node';
@@ -14,6 +14,7 @@ import { useNodePageParams } from '~/hooks/node/useNodePageParams';
import { useNodePermissions } from '~/hooks/node/useNodePermissions';
import { useNodeTags } from '~/hooks/node/useNodeTags';
import { NodeLayout } from '~/layouts/NodeLayout';
+import { ApiGetNodeResponse } from '~/types/node';
import { CommentContextProvider } from '~/utils/context/CommentContextProvider';
import { NodeContextProvider } from '~/utils/context/NodeContextProvider';
import { TagsContextProvider } from '~/utils/context/TagsContextProvider';
@@ -42,28 +43,37 @@ export const getStaticPaths = async () => {
};
};
-export const getStaticProps = async context => {
- if (!context.params?.id) {
- return { props: {} };
- }
+export const getStaticProps = async (
+ context
+): Promise> => {
+ try {
+ if (!context.params?.id) {
+ return { notFound: true };
+ }
- const id = parseInt(context.params.id, 10);
+ const id = parseInt(context.params.id, 10);
- if (!id) {
- return { props: {} };
- }
+ if (!id) {
+ return { notFound: true };
+ }
- const fallbackData = await apiGetNode({ id });
+ const fallbackData = await apiGetNode({ id });
- return {
- props: {
- fallbackData: {
- ...fallbackData,
- last_seen: fallbackData.last_seen ?? null,
+ return {
+ props: {
+ fallbackData: {
+ ...fallbackData,
+ last_seen: fallbackData.last_seen ?? null,
+ },
},
- },
- revalidate: 7 * 86400, // every week
- };
+ revalidate: 7 * 86400, // every week
+ };
+ } catch (error) {
+ console.warn(`[NEXT] can't generate node: `, error);
+ return {
+ notFound: true,
+ };
+ }
};
type Props = RouteComponentProps<{ id: string }> & InferGetStaticPropsType;