Compare commits

4 Commits

6 changed files with 29 additions and 2 deletions

View File

@@ -61,6 +61,7 @@ export class BlogController {
return { return {
id: blog.id, id: blog.id,
title: blog.title, title: blog.title,
description: blog.description,
createdAt: blog.createdAt, createdAt: blog.createdAt,
content: blogContent, content: blogContent,
}; };

View File

@@ -14,6 +14,7 @@ import { Skeleton } from "@/components/ui/skeleton";
import { BlogComments } from "./components/BlogComments"; import { BlogComments } from "./components/BlogComments";
import Image from "next/image"; import Image from "next/image";
import { BlogAPI } from "@/lib/api/client"; import { BlogAPI } from "@/lib/api/client";
import { useEffect } from "react";
export default function Blog() { export default function Blog() {
const params = useParams(); const params = useParams();
@@ -34,6 +35,16 @@ export default function Blog() {
() => BlogAPI.getBlog(id, password || undefined), () => BlogAPI.getBlog(id, password || undefined),
) )
useEffect(() => {
if (data) {
document.title = `${data.title} - 特恩的日志`;
const metaDescription = document.querySelector('meta[name="description"]');
if (metaDescription) {
metaDescription.setAttribute("content", data.description);
}
}
}, [data]);
return ( return (
<div className="w-full overflow-x-hidden"> <div className="w-full overflow-x-hidden">
<div className="max-w-200 mx-auto px-5 overflow-x-hidden mb-10"> <div className="max-w-200 mx-auto px-5 overflow-x-hidden mb-10">

View File

@@ -24,6 +24,12 @@ const getBlogDetailUrl = (id: string): string => {
return `/blog/${encoded}`; return `/blog/${encoded}`;
}; };
export const metadata = {
title: '日志 - 特恩的日志',
description: '我随便发点,你也随便看看~',
};
export default async function Blog() { export default async function Blog() {
let errorMsg = ''; let errorMsg = '';
const blogs = await BlogAPI.list().catch(e => { const blogs = await BlogAPI.list().catch(e => {

View File

@@ -7,6 +7,11 @@ import {
import { ResourceAPI } from "@/lib/api/server"; import { ResourceAPI } from "@/lib/api/server";
import { AlertCircle } from "lucide-react"; import { AlertCircle } from "lucide-react";
export const metadata = {
title: '资源 - 特恩的日志',
description: '一些实用工具和学习资源',
};
export default async function Resources() { export default async function Resources() {
let errorMsg = ''; let errorMsg = '';
const data = await ResourceAPI.list().catch(e => { errorMsg = `${e}`; return null; }); const data = await ResourceAPI.list().catch(e => { errorMsg = `${e}`; return null; });

View File

@@ -1,10 +1,10 @@
import { Geist, Geist_Mono } from "next/font/google"; import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css"; import "./globals.css";
import { ThemeProvider } from "../components/theme-provider"; import { ThemeProvider } from "../components/theme-provider";
import { metadata } from "./config/metadata";
import { Toaster } from "sonner"; import { Toaster } from "sonner";
import { UserAPI } from "@/lib/api/server"; import { UserAPI } from "@/lib/api/server";
import { ClientProvider } from "./ClientProvider"; import { ClientProvider } from "./ClientProvider";
import { Metadata } from "next";
const geistSans = Geist({ const geistSans = Geist({
variable: "--font-geist-sans", variable: "--font-geist-sans",
@@ -16,7 +16,10 @@ const geistMono = Geist_Mono({
subsets: ["latin"], subsets: ["latin"],
}); });
export { metadata }; export const metadata: Metadata = {
title: "控制台 - 特恩的日志",
description: "登录或注册以解锁更多妙妙小工具",
};
export default async function RootLayout({ export default async function RootLayout({
children, children,

View File

@@ -5,6 +5,7 @@ export async function getBlog(id: string, password?: string) {
return clientFetch<{ return clientFetch<{
id: string; id: string;
title: string; title: string;
description: string;
createdAt: string; createdAt: string;
content: string; content: string;
}>(`/api/blog/${id}` + (password ? `?p=${password}` : '')); }>(`/api/blog/${id}` + (password ? `?p=${password}` : ''));