From a5e4155a752fa090c7bc3751a803b4359453e56c Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sat, 25 Apr 2026 12:30:41 +0000
Subject: fix: frontend-backend connection bugs
Agent-Logs-Url: https://github.com/bertyuan/next-blog/sessions/f86da32b-3af7-4393-8077-ce3435137221
Co-authored-by: bertyuan <189593334+bertyuan@users.noreply.github.com>
---
src/app/(main)/(home)/posts/page.tsx | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
(limited to 'src/app/(main)/(home)/posts/page.tsx')
diff --git a/src/app/(main)/(home)/posts/page.tsx b/src/app/(main)/(home)/posts/page.tsx
index 40ebcda..daced35 100644
--- a/src/app/(main)/(home)/posts/page.tsx
+++ b/src/app/(main)/(home)/posts/page.tsx
@@ -58,12 +58,14 @@ export default async function Page(props: {
const pageIndex = searchParams.page
? Number.parseInt(
Array.isArray(searchParams.page)
- ? searchParams.page[0] ?? ''
+ ? (searchParams.page[0] ?? '')
: searchParams.page,
- 10
+ 10,
) - 1
: 0;
+ if (Number.isNaN(pageIndex)) notFound();
+
// 获取文章(带分页)
const { posts, totalDocs, totalPages } = await getPublishedPosts({
limit: postsPerPage,
@@ -106,7 +108,9 @@ export default async function Page(props: {
})}
- {totalPages > 1 && }
+ {totalPages > 1 && (
+
+ )}
>
);
}
@@ -118,12 +122,17 @@ type Props = {
export async function generateMetadata(
props: Props,
- parent: ResolvingMetadata
+ parent: ResolvingMetadata,
): Promise {
const searchParams = await props.searchParams;
const pageIndex = searchParams.page
- ? Number.parseInt(searchParams.page as string, 10)
+ ? Number.parseInt(
+ Array.isArray(searchParams.page)
+ ? (searchParams.page[0] ?? '')
+ : searchParams.page,
+ 10,
+ )
: 1;
const isFirstPage = pageIndex === 1 || !searchParams.page;
--
cgit v1.2.3
From c8b9d38d55fdb48423e4fe663f9ccfb756ab603f Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Sat, 25 Apr 2026 12:31:54 +0000
Subject: fix: check NaN before page subtraction for clarity
Agent-Logs-Url: https://github.com/bertyuan/next-blog/sessions/f86da32b-3af7-4393-8077-ce3435137221
Co-authored-by: bertyuan <189593334+bertyuan@users.noreply.github.com>
---
src/app/(main)/(home)/posts/page.tsx | 10 ++++++----
src/app/(main)/(home)/tags/[...slug]/page.tsx | 10 ++++++----
2 files changed, 12 insertions(+), 8 deletions(-)
(limited to 'src/app/(main)/(home)/posts/page.tsx')
diff --git a/src/app/(main)/(home)/posts/page.tsx b/src/app/(main)/(home)/posts/page.tsx
index daced35..376f5c1 100644
--- a/src/app/(main)/(home)/posts/page.tsx
+++ b/src/app/(main)/(home)/posts/page.tsx
@@ -55,16 +55,18 @@ export default async function Page(props: {
}) {
const searchParams = await props.searchParams;
- const pageIndex = searchParams.page
+ const rawPage = searchParams.page
? Number.parseInt(
Array.isArray(searchParams.page)
? (searchParams.page[0] ?? '')
: searchParams.page,
10,
- ) - 1
- : 0;
+ )
+ : 1;
+
+ if (Number.isNaN(rawPage)) notFound();
- if (Number.isNaN(pageIndex)) notFound();
+ const pageIndex = rawPage - 1;
// 获取文章(带分页)
const { posts, totalDocs, totalPages } = await getPublishedPosts({
diff --git a/src/app/(main)/(home)/tags/[...slug]/page.tsx b/src/app/(main)/(home)/tags/[...slug]/page.tsx
index 45fa52f..30c6464 100644
--- a/src/app/(main)/(home)/tags/[...slug]/page.tsx
+++ b/src/app/(main)/(home)/tags/[...slug]/page.tsx
@@ -89,16 +89,18 @@ export default async function Page(props: {
const tag = params.slug[0];
if (!tag) return notFound();
- const pageIndex = searchParams.page
+ const rawPage = searchParams.page
? Number.parseInt(
Array.isArray(searchParams.page)
? (searchParams.page[0] ?? '')
: searchParams.page,
10,
- ) - 1
- : 0;
+ )
+ : 1;
+
+ if (Number.isNaN(rawPage)) notFound();
- if (Number.isNaN(pageIndex)) notFound();
+ const pageIndex = rawPage - 1;
const { posts, totalDocs, totalPages } = await getPostsByTag(tag, {
limit: postsPerPage,
--
cgit v1.2.3
From 2e7d98420900e1d6749729ea2a94c334e7d65754 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Mon, 27 Apr 2026 07:12:51 +0000
Subject: fix: guard generateMetadata against NaN and sub-1 page numbers
Agent-Logs-Url: https://github.com/bertyuan/next-blog/sessions/a183ee36-4a5d-49b3-a43d-dba5985217dd
Co-authored-by: bertyuan <189593334+bertyuan@users.noreply.github.com>
---
src/app/(main)/(home)/posts/page.tsx | 12 +++++++-----
src/app/(main)/(home)/tags/[...slug]/page.tsx | 12 +++++++-----
2 files changed, 14 insertions(+), 10 deletions(-)
(limited to 'src/app/(main)/(home)/posts/page.tsx')
diff --git a/src/app/(main)/(home)/posts/page.tsx b/src/app/(main)/(home)/posts/page.tsx
index 376f5c1..45016a4 100644
--- a/src/app/(main)/(home)/posts/page.tsx
+++ b/src/app/(main)/(home)/posts/page.tsx
@@ -128,7 +128,7 @@ export async function generateMetadata(
): Promise {
const searchParams = await props.searchParams;
- const pageIndex = searchParams.page
+ const rawPage = searchParams.page
? Number.parseInt(
Array.isArray(searchParams.page)
? (searchParams.page[0] ?? '')
@@ -137,13 +137,15 @@ export async function generateMetadata(
)
: 1;
- const isFirstPage = pageIndex === 1 || !searchParams.page;
- const pageTitle = isFirstPage ? 'Posts' : `Posts - Page ${pageIndex}`;
- const canonicalUrl = isFirstPage ? '/posts' : `/posts?page=${pageIndex}`;
+ if (Number.isNaN(rawPage) || rawPage < 1) notFound();
+
+ const isFirstPage = rawPage === 1 || !searchParams.page;
+ const pageTitle = isFirstPage ? 'Posts' : `Posts - Page ${rawPage}`;
+ const canonicalUrl = isFirstPage ? '/posts' : `/posts?page=${rawPage}`;
return createMetadata({
title: pageTitle,
- description: `Posts${!isFirstPage ? ` - Page ${pageIndex}` : ''}`,
+ description: `Posts${!isFirstPage ? ` - Page ${rawPage}` : ''}`,
openGraph: {
url: canonicalUrl,
},
diff --git a/src/app/(main)/(home)/tags/[...slug]/page.tsx b/src/app/(main)/(home)/tags/[...slug]/page.tsx
index 30c6464..b6bdafa 100644
--- a/src/app/(main)/(home)/tags/[...slug]/page.tsx
+++ b/src/app/(main)/(home)/tags/[...slug]/page.tsx
@@ -165,7 +165,7 @@ export async function generateMetadata(
const searchParams = await props.searchParams;
const tag = params.slug[0];
- const pageIndex = searchParams.page
+ const rawPage = searchParams.page
? Number.parseInt(
Array.isArray(searchParams.page)
? (searchParams.page[0] ?? '')
@@ -174,18 +174,20 @@ export async function generateMetadata(
)
: 1;
- const isFirstPage = pageIndex === 1 || !searchParams.page;
+ if (Number.isNaN(rawPage) || rawPage < 1) notFound();
+
+ const isFirstPage = rawPage === 1 || !searchParams.page;
const pageTitle = isFirstPage
? `${tag} Posts`
- : `${tag} Posts - Page ${pageIndex}`;
+ : `${tag} Posts - Page ${rawPage}`;
const canonicalUrl = isFirstPage
? `/tags/${tag}`
- : `/tags/${tag}?page=${pageIndex}`;
+ : `/tags/${tag}?page=${rawPage}`;
return createMetadata({
title: pageTitle,
description: `Posts tagged with ${tag}${
- !isFirstPage ? ` - Page ${pageIndex}` : ''
+ !isFirstPage ? ` - Page ${rawPage}` : ''
}`,
openGraph: {
url: canonicalUrl,
--
cgit v1.2.3