独立创作

让内容在构建时失败:静态博客的校验边界

从字段长度、分类白名单到别名冲突,说明如何把静态内容错误提前到构建阶段,并保持页面消费契约稳定。

· 约 2 分钟阅读

示例文章:本文是工程内容样例,可直接替换;其中的做法用于说明当前仓库的内容模型。

静态站点没有运行时数据库,不等于没有数据质量问题。标题过长、分类拼错、日期倒置或别名冲突,都会在构建后变成可访问的错误页面。最可靠的处理方式是让构建尽早失败。

Schema 负责单篇约束

字段类型、长度、URL 格式和日期关系适合放进内容 Schema。错误应该指向具体文件与字段,让编辑者不必从最终页面反推原因。

查询层负责跨集合约束

一篇文章的分类格式正确,并不代表分类真实存在。引用白名单、正式 slug 与别名全局唯一等规则,需要读取完整集合后统一校验。

const published = posts
  .filter((post) => !post.data.draft)
  .sort(byPublishDateThenSlug);

页面只读取 View Model

页面若直接查询集合,很容易在不同路由重复过滤与排序。统一的页面模型可以保证草稿不会泄漏,日期展示一致,相关文章算法也只有一个事实源。

失败要比静默回退更明确

未知分类不应该自动归入“其他”,无效 canonical 也不应该悄悄改写。对内容仓库来说,明确失败通常比带着错误上线更便宜。

继续阅读