♻️ 使用 NextJS 重构 #1
| @@ -1,28 +1,44 @@ | ||||
| import RSS from "rss"; | ||||
| import { Feed } from "feed"; | ||||
| import { SITE_DESCRIPTION, SITE_NAME, SITE_URL } from "@/app/consts"; | ||||
| import { getSortedPosts } from "@/content/posts"; | ||||
| import { client } from "@/sanity/lib/client"; | ||||
|  | ||||
| export async function GET() { | ||||
|   const feed = new RSS({ | ||||
|   const feed = new Feed({ | ||||
|     title: SITE_NAME, | ||||
|     description: SITE_DESCRIPTION, | ||||
|     site_url: SITE_URL, | ||||
|     feed_url: `${SITE_URL}/feed`, | ||||
|     id: SITE_URL, | ||||
|     link: SITE_URL, | ||||
|     favicon: `${SITE_URL}/favicon.png`, | ||||
|     feedLinks: { atom: `${SITE_URL}/feed` }, | ||||
|     language: "zh-CN", | ||||
|     copyright: `Copyright © ${new Date().getFullYear()} SmartSheep Studio`, | ||||
|   }); | ||||
|  | ||||
|   getSortedPosts().forEach((item) => { | ||||
|     feed.item({ | ||||
|       url: `${SITE_URL}/p/${item.id}`, | ||||
|   const posts = await client.fetch<any[]>(`*[_type == "post"] { | ||||
|     title, description, slug, publishedAt, | ||||
|     mainImage { | ||||
|       asset -> { | ||||
|         _id, | ||||
|         url | ||||
|       }, | ||||
|       alt | ||||
|     }, | ||||
|     "categories": categories[]->title, | ||||
|   }`); | ||||
|  | ||||
|   posts.forEach((item) => { | ||||
|     feed.addItem({ | ||||
|       id: `${SITE_URL}/p/${item.slug.current}`, | ||||
|       link: `${SITE_URL}/p/${item.slug.current}`, | ||||
|       title: item.title, | ||||
|       description: item.description ?? "No description yet.", | ||||
|       date: item.date, | ||||
|       date: new Date(item.publishedAt) | ||||
|     }); | ||||
|   }); | ||||
|  | ||||
|   return new Response(feed.xml(), { | ||||
|   return new Response(feed.rss2(), { | ||||
|     headers: { | ||||
|       "content-type": "application/xml", | ||||
|     }, | ||||
|       "content-type": "application/xml" | ||||
|     } | ||||
|   }); | ||||
| } | ||||
|   | ||||
| @@ -27,6 +27,7 @@ | ||||
|     "@sanity/ui": "^2.0", | ||||
|     "@sanity/vision": "3", | ||||
|     "@types/mdx": "^2.0.11", | ||||
|     "feed": "^4.2.2", | ||||
|     "gray-matter": "^4.0.3", | ||||
|     "next": "^14.1", | ||||
|     "next-sanity": "7.1.4", | ||||
| @@ -34,7 +35,6 @@ | ||||
|     "react": "^18.2", | ||||
|     "react-dom": "^18", | ||||
|     "react-markdown": "^9.0.1", | ||||
|     "rss": "^1.2.2", | ||||
|     "sanity": "^3.25", | ||||
|     "styled-components": "^6.0" | ||||
|   }, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user