ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

HedgeDoc 种子数据文件 guest_note.md 全解析:从 YAML frontmatter 到数据库笔记的完整链路

HedgeDoc 种子数据文件 guest_note.md 全解析:从 YAML frontmatter 到数据库笔记的完整链路 后端前端云原生【免费下载链接】hedgedocHedgeDoc - Ideas grow better together项目地址https://gitcode.com/gh_mirrors/he/hedgedoc点击查看免费下载本文围绕 HedgeDoc 后端数据库种子目录中的示例笔记 guest_note.md 展开剖析该文件在开发/测试环境中的角色、frontmatter 语法约定、种子脚本的读取与入库流程以及如何通过 Knex 命令把这份 Markdown 变成一条真实的数据库笔记。读完本文你将掌握 HedgeDoc 种子笔记文件的完整结构与自定义方法能够为本地开发环境编写自己的测试笔记。一、guest_note.md 是什么一份面向 guest 用户的种子笔记在 HedgeDoc 仓库中backend/src/database/seeds/notes/guest_note.md 是一份被数据库种子seed脚本使用的 Markdown 示例笔记。它的完整内容如下--- title: Guest User Note description: A test note for the guest user tags: - guest - note --- Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.整个文件只有 11 行由两部分构成YAML frontmatter第 1–7 行用---包裹的元数据块声明了标题、描述和标签正文第 9 行起一段 Lorem ipsum 占位文本。它本身不是给人阅读的文档而是种子数据系统的输入文件当开发者运行数据库种子命令时HedgeDoc 后端会读取这份 Markdown解析其中的 frontmatter 与正文进而创建一条完整的笔记记录含 revision、别名、作者归属信息等。与该文件同目录的还有 local_user_note.md本地测试用户的普通笔记和 local_user_slide.md本地测试用户的幻灯片笔记三者共同构成种子笔记的样例集。二、frontmatter 语法约定种子文件如何表达元数据guest_note.md 的核心技术内容就是它的 YAML frontmatter。HedgeDoc 对 frontmatter 的解析遵循 NoteFrontmatterSchema由 zod 定义的 schematitle、description、tags是其中三个最常用的字段字段类型默认值guest_note.md 中的值说明titlestringGuest User Note笔记标题descriptionstringA test note for the guest user笔记描述tagsstring[][][guest, note]标签列表用于探索页筛选typedocument/slidedocument未声明取默认值渲染器类型breaksbooleantrue未声明是否将换行视为换段langISO 639-1 代码en未声明笔记语言dirltr/rtlltr未声明文本书写方向robotsstring未声明robots meta 标签licensestring未声明添加到 HTML 的许可证头部opengraph键值对{}未声明OpenGraph meta 标签slideOptions对象见默认值未声明reveal.js 幻灯片选项默认值定义在 default-note-frontmatter.ts 中包括slideOptions.transition: zoom、autoSlide: 0、slideNumber: false等。guest_note.md 只声明了title、description、tags其余字段全部走默认值——这也是最小可用 frontmatter的示范。解析过程中parse-note-frontmatter.ts 会先用js-yaml的load()将 YAML 字符串转为对象再交给 zod schema 做类型校验与默认值填充若 YAML 无效或校验失败则返回错误并回退到defaultNoteFrontmatter。值得留意的是schema 使用了.passthrough()即未知字段会被忽略而不会报错这保证了种子文件以及用户笔记可以携带额外的自定义元数据。三、从 Markdown 到数据库记录种子脚本的完整处理链路guest_note.md 被真正消费的地方是种子脚本 03_note.ts。该脚本按顺序完成以下工作1. 清理旧数据脚本开头会清空note、alias、revision、revision_tag、authorship_info、note_group_permission、note_user_permission七张表03_note.ts保证种子可重复执行而不产生脏数据。2. 读取 Markdown 文件const guestNoteContent readFileSync(./notes/guest_note.md, utf-8);注意路径是相对 seeds 目录的./notes/guest_note.md03_note.ts因此运行种子命令时的工作目录必须与 Knex 配置的 seeds 目录一致详见第四节。3. 提取 revision 元数据读取到的原始字符串并不会直接落库而是先经过 extract-revision-metadata-from-content.ts 的处理从中抽取四样东西title优先取 frontmatter 中的title否则通过generateNoteTitle从正文首个标题生成description取 frontmatter 的description缺省为空字符串tags取 frontmatter 的tags缺省为空数组noteType取 frontmatter 的type缺省为NoteType.DOCUMENT。对 guest_note.md 而言frontmatter 中恰好声明了全部三项因此最终得到title: Guest User Note、description: A test note for the guest user、tags: [guest, note]、type: document。4. 写入 note / alias / revision 等表脚本随后向多张表插入数据03_note.tsguest_note.md 对应其中的笔记 id 1note 表owner_id: 1guest 用户、version: 2、publicly_visible: false。version字段记录笔记创建时所在的 HedgeDoc 大版本用于 HD1→HD2 的迁移判断见 note.tsalias 表为笔记 1 建立主别名guest-noteis_primary: true。HedgeDoc 中笔记正是通过别名访问与识别的访问/guest-note即可打开这篇种子笔记revision 表写入固定 UUID0196a6e7-9669-7ef3-9c10-520734c61593、完整content、由diff库生成的createPatch(guestNoteAlias, , guestNoteContent)补丁、yjs_state_vector: null无实时编辑状态、note_type: document以及提取出的 title/description。Revision 代表笔记在某个时间点的内容快照见 revision.tsrevision_tag 表将guest、note两个标签挂到该 revision 下authorship_info 表以start_position: 0、end_position: guestNoteContent.length记录整篇内容归属于作者 id 1guest 用户即整篇由 guest 创作权限表note_group_permission中为笔记 1 赋予 group 1 的can_edit: true权限作为默认权限样例。从源码结构看这一整套写入逻辑保证了即使只是一份 11 行的 Markdown也能在数据库中形成一条完整的、可被前端正常展示的笔记这正是 guest_note.md 作为测试样本的价值所在。四、guest 用户owner_id 1 背后的账号定义guest_note.md 的 owner 是种子脚本 01_user.ts 中插入的第一个用户其关键特征为字段值含义usernamenull无用户名即非注册用户guest_uuid55b4618a-d5f3-4320-93d3-f3501c73d72b唯一的访客标识display_nameGuest 1显示名author_style1作者样式编号用于区分不同作者的笔记配色guest 用户没有identity记录只有本地用户 id 2 才有一条LOCAL类型的身份记录密码为test123见 01_user.ts。guest_note.md 正是用来验证匿名/访客用户视角下的笔记渲染与权限表现的它对外表现为一篇游客创建的笔记可配合/guest-note别名在浏览器中直接查看。此外种子脚本 02_api_token.ts 还会为本地测试用户创建一枚有效期一年的 API TokenSHA-512 哈希存储配合上述笔记共同支撑后端的 e2e 测试场景见 backend/test 目录下的各 e2e-spec 文件。五、如何运行种子命令Knex 配置与实操要真正让 guest_note.md 生效需要借助 Knex 的种子机制。后端为开发环境预置了 Knex 配置 knexfile.ts数据库客户端better-sqlite3数据库文件./hedgedoc.sqlite迁移目录./src/database/migrations迁移文件说明见 migrations/README.md种子目录./src/database/seeds即存放01_user.ts、02_api_token.ts、03_note.ts的目录。在 backend/package.json 中项目封装了 Knex 命令入口knex: tsx ../node_modules/.bin/knex --migrations-directory src/database/migrations --knexfile ./knexfile.ts因此在backend目录下可依次执行# 1. 先执行数据库迁移应用 schema pnpm knex migrate:latest # 2. 再运行种子脚本按文件名顺序执行 01_user → 02_api_token → 03_note pnpm knex seed:run执行seed:run后03_note.ts 的seed(knex)函数即被调用guest_note.md 随之被读取、解析并落库。也可以直接使用 pnpm workspace 根目录的命令pnpm --filter hedgedoc/backend knex seed:run达到同样效果。需要留意的是种子脚本会先清空相关表再写入因此重复执行是幂等的但会覆盖已有的种子笔记数据。六、验证与自定义把 guest_note.md 变成你自己的种子笔记执行完种子命令后可以从两个层面验证数据库层面检查hedgedoc.sqlite中的note1 条 guest 笔记 2 条本地用户笔记、aliasguest-note/user-note/user-slide、revision3 条与revision_tag标签等表应用层面启动后端pnpm start:dev后访问http://localhost:3000/guest-note应能渲染出标题 Guest User Note、描述 A test note for the guest user 与正文占位文本。若想自定义种子笔记直接修改 guest_note.md 或参照它新建文件即可但需同步注意frontmatter 必须位于文件最顶部且以---包裹格式与 NoteFrontmatterSchema 兼容tags使用 YAML 列表语法文件读取路径在 03_note.ts 中是硬编码的相对路径新增文件需在脚本中补充readFileSync与对应的表插入逻辑revision 的 UUID 与别名由脚本常量固定如guest-note若改动别名需同步更新脚本中的guestNoteAlias及访问 URL对幻灯片类种子如 local_user_slide.mdfrontmatter 中需声明type: slide正文则使用---分隔幻灯片、----分隔分支。七、小结guest_note.md 虽然只有 11 行却是 HedgeDoc 种子数据体系的一个缩影它演示了最小可用的 frontmatter 语法、Markdown 正文、guest 用户归属并经由 03_note.ts 的完整处理链路读取 → 元数据提取 → 多表写入成为数据库中的一条可访问笔记。理解这一链路既有助于开发者快速搭建本地演示环境也为编写自定义种子笔记、参与 HedgeDoc 后端开发提供了可直接对照的样板。赞分享后端前端云原生【免费下载链接】hedgedocHedgeDoc - Ideas grow better together项目地址https://gitcode.com/gh_mirrors/he/hedgedoc点击查看免费下载相关推荐HedgeDoc 种子数据解析local_user_note.md 与开发环境测试笔记的生成机制HedgeDoc 种子数据解析local_user_note.md 与开发环境测试笔记的生成机制 本指南以 HedgeDoc 仓库中 backend/src/后端前端云原生HedgeDoc 幻灯片SlideDeck笔记全解析从 local_user_slide.md 种子数据看 --- / ---- 分隔语法与 reveal.js 渲染管线HedgeDoc 幻灯片SlideDeck笔记全解析从 local_user_slide.md 种子数据看 / 分隔语法与 reveal.js 渲染管线后端前端云原生Sentry事件记录完整指南从异常捕获到数据存储的全链路解析Sentry事件记录完整指南从异常捕获到数据存储的全链路解析 引言为什么事件记录对现代应用至关重要 在分布式系统与微服务架构普及的今天应用异常的捕获与分析可观测性APM异常检测日志分析后端前端上一篇Google Research Football代码架构深度剖析从场景构建到AI决策下一篇BezierJS 开源项目教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表