/** * # 路由 博客归档分页 /blog/page/$page/ * 与原站一致的第 2+ 页归档(每页 12 篇,日期倒序)。 */ import { createFileRoute, notFound } from "@tanstack/react-router"; import { BlogArchive, loadBlogArchive } from "~/components/website/BlogArchive"; export const Route = createFileRoute("/blog/page/$page")({ loader: async ({ params }) => { const n = Number(params.page); const data = await loadBlogArchive(Number.isFinite(n) && n > 1 ? Math.floor(n) : 1); // 越界页真 404(原站 /blog/page/28/ 404;软 404 影响 SEO) if (!Number.isFinite(n) || n < 1 || (data.page > 1 && data.page > Math.ceil(data.list.total / data.list.pageSize))) throw notFound(); return data; }, head: ({ loaderData }) => ({ meta: [ { title: `Blog - Page ${loaderData?.page ?? 2} of ${loaderData ? Math.max(1, Math.ceil(loaderData.list.total / loaderData.list.pageSize)) : 2} - DusunIoT`, }, { name: "description", content: "IoT guides, industry insights, product news and tutorials from Dusun IoT experts." }, ], }), component: BlogArchivePagedPage, }); /** # 组件 博客归档分页页 */ function BlogArchivePagedPage() { const data = Route.useLoaderData(); return ; }