我在Next JS中使用App Router,Strapi作为我的CMS。当我在Postman中查询API时,我得到了预期的结果。没有对应slugs的错误路由返回404,只有带有slugs的路由返回200。
然而,在我的Next JS前端中,所有路由都解析为200,如果没有slug,它只会返回一个空的数据数组。我可以检查空数组并推送404错误页面,但这似乎是一个坏主意,原因有很多。
我似乎找不到任何正确的方法来做到这一点。This answer seems to be out of date with the old pages router。我如何返回一个404在一个坏的路由与动态路由与应用路由器的方法?
下面是我当前的前端代码,文件夹结构为app/works/[slug]/page.js
'use client'
import axios from 'axios';
import useSWR from 'swr';
import { useRouter } from 'next/navigation';
const fetcher = (url) => axios.get(url).then((res) => res.data.data);
export default function SingleWork({ params }) {
const router = useRouter();
const { slug } = params;
const { data, error, isLoading } = useSWR(
`http://localhost:1337/api/works?filters[slug][$eq]=${slug}&populate=*`,
fetcher
);
if (error) {
return (
<div>Failed to load</div>
)
}
if (isLoading) {
return (
<div>Loading...</div>
)
};
if (!data[0]) {
router.push("/404")
} else {
return (
<div>My Post: {JSON.stringify(data)}</div>
)
}
}
字符串
2条答案
按热度按时间k5ifujac1#
从SingleWork组件中删除自定义404处理。您将在getServerSideProps函数中处理它。
创建一个pages/app/works/[slug].js文件,包含以下内容:
字符串
通过使用getServerSideProps函数,您可以在服务器端执行数据获取并正确处理404错误条件。如果未找到数据,则notFound属性设置为true,导致404错误响应。否则,获取的数据将作为props传递给组件。
wlsrxk512#
要使Next.js为动态参数与定义的路由不匹配的路由返回404状态,可以在布局或页面文件中设置dynamicParams。
导出常量动态参数= false // true|错的,
true(预设值):generateStaticParams中未包含的动态区段会视需要产生。
false:generateStaticParams中不包含的动态段将返回404。
检查此参考