目前我正忙于构建我的第一个Next.JS应用程序(Next和Strapi)。现在一切都正常了,但我很好奇在使用getStaticProps时实现错误处理的最好方法是什么。我自己尝试了一些方法(传递多个道具等),但都不起作用(典型的非序列化JSON错误)。我想要实现的是页面本身上的一条错误消息(例如/About),指出没有找到数据。附加错误消息(StatusCode)。我希望这是可能的,我做了很多研究,发现:这是我的。但这不是我想要的。
getStaticProps
8tntrjer1#
您可以创建custom 404 and 500 error pages。有一个显示statusCode的选项,但是您可以通过在getStaticProps中返回notfound: true来告诉Next使用404页。如果您返回notfound: true,则statusCode将始终显示404页,并且您知道状态代码将是404。下面是一个在getStaticProps中捕获错误的示例--这将生成您的页面或显示根据您的规范设计的自定义错误页面。
notfound: true
export const getStaticProps = async () => { try { const { data, errors } = await someQuery(); if (errors || !data) { return { notFound: true }; } return { props: { data } }; } catch () { return { notFound: true }; } };
notFound的另一个不太明显的用例是使用它从生产环境中排除目录或页面。下面的检查将在NEXT/EXPORT(SSG)期间跳过整个页面或目录。此检查用于生成仅用于开发的静态页面。如果目录中的单个页面具有下面的复选标记,则在构建过程中将跳过该页面。如果目录中的每一页都有复选标记,则将跳过整个目录,包括该文件夹。
notFound
export const getStaticProps = async () => { if (process.env.NODE_ENV === 'production') { return { notFound: true }; } ... };
确保不包括您不想在getStaticPaths中构建的路线。
getStaticPaths
anauzrmj2#
这对我很管用。Api.js
export async function fetcher(url, options = {}) { try { let response; if (!options) { response = await fetch(url); } else { response = await fetch(url, options); } const data = await response.json(); return data; } catch (error) { return { notFound: true, }; } }
在Pages/index.js中
import { fetcher } from "/lib/api";
..。
export async function getStaticProps() { const { data, notFound } = await fetcher( `${process.env.NEXT_PUBLIC_STRAPI_API}/homepage?publicationState=live&populate[seo][populate]=%2A&populate[pageHeading][populate]=%2A&populate[socialMedia][populate]=%2A&populate[block][populate]=%2A` ); if (notFound) { return { notFound: true, }; } return { props: { data } }; }
2条答案
按热度按时间8tntrjer1#
您可以创建custom 404 and 500 error pages。有一个显示statusCode的选项,但是您可以通过在
getStaticProps
中返回notfound: true
来告诉Next使用404页。如果您返回
notfound: true
,则statusCode将始终显示404页,并且您知道状态代码将是404。下面是一个在
getStaticProps
中捕获错误的示例--这将生成您的页面或显示根据您的规范设计的自定义错误页面。notFound
的另一个不太明显的用例是使用它从生产环境中排除目录或页面。下面的检查将在NEXT/EXPORT(SSG)期间跳过整个页面或目录。此检查用于生成仅用于开发的静态页面。如果目录中的单个页面具有下面的复选标记,则在构建过程中将跳过该页面。如果目录中的每一页都有复选标记,则将跳过整个目录,包括该文件夹。
确保不包括您不想在
getStaticPaths
中构建的路线。anauzrmj2#
这对我很管用。
Api.js
在Pages/index.js中
..。