Skip to content

修复新版 Notion 数据结构下 API 新建文章不显示的问题#3900

Open
such-xl wants to merge 2 commits intotangly1024:mainfrom
such-xl:main
Open

修复新版 Notion 数据结构下 API 新建文章不显示的问题#3900
such-xl wants to merge 2 commits intotangly1024:mainfrom
such-xl:main

Conversation

@such-xl
Copy link
Copy Markdown

@such-xl such-xl commented Apr 5, 2026


已知问题

  1. Notion 新版 data source / collection 返回结构兼容不完整
  • schema 实际存在,但嵌套层级比原逻辑更深
  • 现有代码未正确解析 collection.value.value.schema 一类结构
  • 导致 typestatuscategoryslugdate 等字段无法正确映射
  1. 新 API 创建页面可能被文章列表遗漏
  • 现有 getAllPageIds() 主要依赖 collection_view.page_sort
  • 某些新页面已经进入 collectionQuery,但尚未出现在 page_sort
  • 结果是 Notion 中页面已存在、属性完整,但站点列表不显示

解决方案

  1. 增强 collection/schema 归一化兼容逻辑
  • 扩展 normalizeCollection() 的剥层能力
  • 兼容新版 Notion 返回的多层包装结构
  • 在缺少稳定 collection_id 时,从 pageRecordMap.collection 推断唯一 collection id
  1. 调整页面 id 收集策略
  • 保留 page_sort 作为顺序来源
  • 同时合并 collectionQuery 中的 block ids
  • 避免“新页面已存在但因未进入 page_sort 而被漏掉”的问题

改动收益

  1. 改善新版 Notion 数据结构兼容性
  • 正确解析 schema
  • 恢复 type/status/category/slug/date 等关键字段映射
  • 降低因 Notion 结构变化导致的站点不可用风险
  1. 提高新文章展示的稳定性
  • API 新建并发布的页面可被正常纳入文章列表
  • 不再只依赖 page_sort 的刷新时机
  • 减少“Notion 里有、网站上没有”的情况

具体改动

  1. lib/db/notion/normalizeUtil.js
  • 调整 normalizeCollection() 的归一化逻辑
  • 将 collection 剥层深度从 3 层扩展到 5 层
  • 兼容新版 Notion collection 包装结构
  1. lib/db/SiteDataApi.js
  • 为主数据读取补充 collectionId fallback
  • 当根 page 元数据未稳定提供 collection_id 时,从 pageRecordMap.collection 推断
  • 确保主站点数据链路可以正确读取 collection/schema
  1. lib/db/notion/getNotionConfig.js
  • 为配置中心读取补充同样的 collectionId / schema fallback
  • 确保 Config 页面在新版结构下也能正常解析
  1. lib/db/notion/getAllPageIds.js
  • 保留目标 view 的 page_sort 顺序
  • 补充合并所有 view 的 page_sort
  • 始终合并 collectionQuery 结果,而不是仅在 page_sort 为空时兜底

本地开发环境测试通过

测试确认

  • 本地开发环境测试通过
  • 本地 fresh build 测试通过
  • 本地 production start 测试通过
  • schema 可正常解析
  • API 新建并发布的测试文章可正常显示
  • 配置中心可正常读取
  • 新页面进入 collectionQuery 但未进入 page_sort 时,仍可被站点识别

@vercel
Copy link
Copy Markdown

vercel bot commented Apr 5, 2026

@such-xl is attempting to deploy a commit to the tangly1024's projects Team on Vercel.

A member of the Team first needs to authorize it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant