atian25 / yuque-exporter

export yuque to local markdown
MIT License
321 stars 36 forks source link

知识库有1000多篇文档时,元数据缺失 #8

Open DesistDaydream opened 2 years ago

DesistDaydream commented 2 years ago

.meta/ 目录下的文档最多 500 篇,若知识库中文档数量过多,将会出现如下报错:

node:internal/process/esm_loader:97
    internalBinding('errors').triggerUncaughtException(
                              ^

[Error: ENOENT: no such file or directory, open 'storage/.meta/desistdaydream/learning/docs/as5gkb.json'] {
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: 'storage/.meta/desistdaydream/learning/docs/as5gkb.json'
}
atian25 commented 2 years ago

看下日志,是在 crawl 阶段还是 build 阶段的报错

DesistDaydream commented 2 years ago

build 阶段报错,需要在sdk里加一下 url 的 query

            query: {
                limit: 2000,
            },

这个地方最好能加在 CLI 的标志上~我 TS 还在初学。。好多还不熟悉。不知道具体咋写。。T_T

主要是 crawl 阶段,这个接口的限制 repos/${namespace}/docs,这个接口分页了,咱默认最多只能获取到 500 个元素,虽然咱元数据只有 500,但是 build 的时候,会操作全部文档,所以有了上面那个报错,找不到 .json 文件。

不过,这样改了好像可能触发 429 限流,然后就报:

node:internal/process/esm_loader:97
    internalBinding('errors').triggerUncaughtException(
                              ^

BodyTimeoutError: Body Timeout Error
    at Timeout.onParserTimeout [as _onTimeout] (/usr/local/lib/node_modules/yuque-exporter/node_modules/undici/lib/client.js:906:28)
    at listOnTimeout (node:internal/timers:566:11)
    at process.processTimers (node:internal/timers:507:7) {
  code: 'UND_ERR_BODY_TIMEOUT'
}

Node.js v18.12.1

咱还得加点策略来等待或者重试之类的~~~

atian25 commented 2 years ago

嗯,容错处理这块没时间搞, undici 好像有个 retry 参数的。

欢迎 PR

DesistDaydream commented 2 years ago

咱的逻辑里现在可以只导出某个指定的知识库么?

atian25 commented 2 years ago

入参给具体的 namespace 即可

DesistDaydream commented 2 years ago

咱这说的 namespace 指的是 ${UserName}/${RepoName} 对吧?~ 我这样执行了之后。。还是会把我所有知识库都 build 一遍。。。。

atian25 commented 2 years ago

下载是 namespace,build 是全量的,因为需要考虑相对链接。你如果不需要的话就换个目录。

qixiaobo commented 6 months ago

最近改成100篇了 需要 手动分页 image