Content Collections 如何管理博客文章封面
发布于

Content Collections 如何管理博客文章

理解文章元数据校验、读取和排序,让 Markdown 博客保持整洁。

完整教程进阶Astro内容工程数据模型

博客文章越来越多以后,光有 Markdown 文件还不够。我们需要确保每篇文章都有标题、简介和有效日期,这正是 Content Collections 的工作。

定义文章结构

这个项目在 src/content.config.ts 中定义了 blog 集合:

const blog = defineCollection({
  loader: glob({ base: './src/content/blog', pattern: '**/*.{md,mdx}' }),
  schema: z.object({
    title: z.string(),
    description: z.string(),
    pubDate: z.coerce.date(),
    updatedDate: z.coerce.date().optional(),
    heroImage: z.optional(image()),
  }),
});

如果文章缺少必填字段,或者日期格式有问题,Astro 会在构建时提示错误。这比等到网站上线以后才发现问题可靠得多。

在页面中读取文章

const posts = (await getCollection('blog')).sort(
  (a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf(),
);

这里先读取所有文章,再按照发布时间从新到旧排序。首页使用同样的方式,并通过 slice(0, 3) 只展示最近三篇。

内容和界面分离

Markdown 负责“写什么”,Astro 页面负责“怎样展示”。这种分工让我们可以专心写文章,而不用为每篇文章重复复制 HTML。