附astro博客模板安装屏幕
npm create astro@latest -- --模板博客
npm run dev
从 Astro 5 开始,引入了内容层 API,该工具允许您在网站构建期间从任何来源加载数据,并通过简单、安全类型的 API 访问它。
此 API 可以灵活地处理来自各种来源的内容,例如本地 Markdown 文件、远程 API 或内容管理系统 (CMS)。通过使用特定模式定义内容“集合”,您可以有效地构建和验证数据。此外,内容层 API 还提高了内容较多的网站的性能,加快了构建时间并减少了内存使用量。
https://astro.build/blog/astro-5/
您可以使用 Astro 的内容层 API 将 dev.to 帖子集成到您的网站中。尽管 dev.to 没有特定的加载器,但您可以创建一个自定义加载器来使用其 API 并将帖子存储在 Astro 的内容集合中。
要实现此目的,请按照以下步骤操作:
DEV_TO_API_URL=https://dev.to/api/ DEV_API_KEY=tu_clave_de_api
在项目的 src/lib/ 文件夹中,创建一个 getArticles.js 文件,其中包含以下函数来获取帖子:
const { DEV_API_KEY, DEV_TO_API_URL } = import.meta.env; export async function fetchArticles() { const res = await fetch(`${DEV_TO_API_URL}articles/me/published`, { headers: { "api-key": DEV_API_KEY, }, }); const data = await res.json(); return data; }
在 src/content.config.ts 中,使用内容层 API 为 dev.to 帖子定义一个集合:
import { glob } from 'astro/loaders'; import { defineCollection, z } from 'astro:content'; import { fetchArticles } from "../lib/getArticles"; const blog = defineCollection({ // Load Markdown and MDX files in the `src/content/blog/` directory. loader: glob({ base: './src/content/blog', pattern: '**/*.{md,mdx}' }), // Type-check frontmatter using a schema schema: z.object({ title: z.string(), description: z.string(), // Transform string to Date object pubDate: z.coerce.date(), updatedDate: z.coerce.date().optional(), heroImage: z.string().optional(), }), }); const devTo = defineCollection({ loader: async () => { const articles = await fetchArticles(); return articles.map((article) => ({ id: article.id.toString(), slug: article.slug, body: article.body_markdown, data: { title: article.title, date: new Date(article.published_at), tags: article.tag_list, summary: article.description, image: article.social_image, }, })); }, }); export const collections = { blog, devto };
以上是测试开发的详细内容。更多信息请关注PHP中文网其他相关文章!