NotionNext icon indicating copy to clipboard operation
NotionNext copied to clipboard

[Vercel部署异常] 改用官方 Notion API 获取Notion的数据

Open yuki-2025 opened this issue 4 months ago • 10 comments

为什么提出这个新的特性改动 NotionNext 用的应该是方案A:“渲染公开页”的模式(如 react-notion-x + notion-client 读取公开页),只需要一个 NOTION_ROOT_PAGE_ID,就可以取notion page里面的数据。 缺点:

  1. 没有用notion api的方式去取notion的数据,造成网站老是因为取不到数据而奔溃。比如现在。
  2. 没有数据库查询 → 分类、标签、分页、搜索都要自己实现/改写,维护成本高,
  3. 且 Notion 的公开接口并非官方稳定 API。

描述一下你推荐的解决方案 方案B: 改用官方 Notion API:用集成 token + 数据库 ID,在构建/ISR 拉数据并静态化,避免依赖 /api/v3。 https://developers.notion.com/docs/create-a-notion-integration 以后我们把自己的Integration secret id 加进去Vercel Environment variable就可以了。 好处:

  1. 用官方 Notion API(integration)」不会把我们的数据库暴露给爬虫。
  2. 开发量稍大,但更稳、更私密、可控;推荐作为长期方案。
  3. 至少稳定,不会老奔溃。 Image

描述一下你考虑过的其它替代解决方案 简要说明你所有想过的有可能解决此问题的方案。

补充说明 补充与此特性相关的内容

yuki-2025 avatar Aug 20 '25 02:08 yuki-2025

需求+1

alllike996 avatar Aug 20 '25 02:08 alllike996

需求+1

长远方法是替换API方案。此功能开发周期会长一些,将列入后续计划。

快速方法是替换一下函数: 参考:https://github.com/NotionX/react-notion-x/issues/659

tangly1024 avatar Aug 20 '25 02:08 tangly1024

需求+1

长远方法是替换API方案。此功能开发周期会长一些,将列入后续计划。

快速方法是替换一下函数: 参考:NotionX/react-notion-x#659

我居然没有找到代码有调用syncRecordValues的地方

EwingYangs avatar Aug 20 '25 03:08 EwingYangs

关注

lvshin avatar Aug 20 '25 03:08 lvshin

一个简单粗暴的补丁已提交,暂时应对此问题: https://github.com/tangly1024/NotionNext/pull/3568

更新至最新的main分支代码,测试一下此功能。

tangly1024 avatar Aug 20 '25 03:08 tangly1024

大佬牛皮,正常了。

alllike996 avatar Aug 20 '25 03:08 alllike996

大佬牛皮,正常了。

你是怎么改的?

一个简单粗暴的补丁已提交,暂时应对此问题: #3568

更新至最新的main分支代码,测试一下此功能。

我根据 @https://github.com/tangly1024/NotionNext/commit/7bafaaa7e9185a9941694d25ad252542cccd71b6 去 lib\notion\getNotionAPI.js 加上了这些代码 ,然后重新vercel 部署也还是不行啊

   return new NotionLibrary({
    activeUser: BLOG.NOTION_ACTIVE_USER || null,
    authToken: BLOG.NOTION_TOKEN_V2 || null,
    userTimeZone: Intl.DateTimeFormat().resolvedOptions().timeZone
    userTimeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
    kyOptions: { 
      // 全局 Ky 配置
      hooks: {
        beforeRequest: [
          (request) => {
            const url = request.url.toString()
            if (url.includes('/api/v3/syncRecordValues')) {
              return new Request(
                url.replace('/api/v3/syncRecordValues', '/api/v3/syncRecordValuesMain'),
                request
              )
            }
            return request
          }
        ]
      }
    }
  })
}

yuki-2025 avatar Aug 20 '25 04:08 yuki-2025

大佬牛皮,正常了。

同, 更新了https://github.com/tangly1024/NotionNext/pull/3568

还是部署失败了

ShuQiHere avatar Aug 20 '25 05:08 ShuQiHere

主要就是把syncRecordValues改成syncRecordValuesMain,更新就正常啦。

alllike996 avatar Aug 20 '25 05:08 alllike996

感谢,更新Fork后自动部署,搞定了

wusay avatar Aug 20 '25 10:08 wusay