Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

使用 aurora 主題時,pages 請求內的各 page 的 __page 屬性不會設定上去 #33

Closed
konnokai opened this issue Apr 18, 2023 · 3 comments · Fixed by #41
Closed
Labels
enhancement New feature or request PR welcome

Comments

@konnokai
Copy link
Contributor

錯誤說明

使用 Hexo 內建的 landscape 主題請求 http://localhost:4000/proxy/hexo/pages 時正常
image

當主題改用 aurora__page 屬性消失
image

網頁顯示的錯誤訊息
20230418_181031_chrome

且在建立新的 page 時 Hexo 會出現錯誤 (這個錯誤不管使用 landscape 或是 aurora 主題都會出現,但使用 landscape 主題的話重整頁面後 page 會出現在網頁上)
image

已知情況

使用 aurora 主題時,src\server\services\hexo-service.ts#L253 中的 docsres 變數已無 __page 屬性
image

不使用 .map(toPage) 直接輸出 hexo.locals.get("pages") 的情況亦同
image

猜測

aurora 主題在 generate 階段時將某個東西給移除掉了,或是沒有把 __page 屬性補上

備註

由於 aurora 主題原作者已停止開發,目前本人有自行 fork 該專案修改,也會追查此問題的導致的原因跟協助處理

使用版本

  • hexo: 6.3.0
  • hexo-cli: 4.3.0
  • os: Windows 10 Pro x64 (但這問題在我實際部屬的伺服器上也會發生,伺服器: Debian GNU/Linux 11 (bullseye) x86_64)
  • node: 16.20.0
  • aurora: 1.5.5 本人修改的版本
@konnokai
Copy link
Contributor Author

目前解決方法

Server端

server\src\server\services\hexo-service.ts#L260

const res = docs.map((pageDoc) => {
  const page: BriefPage = transformPageToBrief(transformPage(pageDoc))
  page.__page = true // 強制設定值上去
  delete page.content
  delete page._content
  delete page.raw
  delete page.more
  return page
})

server\src\server\services\hexo-service.ts#L271

async getPageBySource(source: string): Promise<Page> {
  const hexo = await this._hexoInstanceService.getInstance()
  const docs = hexo.locals.get("pages").toArray().map(toPage)
  const doc = docs.find((item) => item.source === source)
  if (!doc || isAsset(doc)) throw new PostOrPageNotFoundError("page")
  const res = transformPage(doc)
  doc.__page = true  // 強制設定值上去
  this._logService.log("get page by source", source)
  return res
}

不過有時候會遇到請求 getPageBySource 時一樣遺失 __page 屬性的問題,但重整一次就好

Clinet端

client\src\api\entities.ts#L17

export const ZIPage = z.object({
  __page: z.boolean().default(true), // 強制設定為 ture
})

client\src\api\entities.ts#L22

export const ZIPost = z.object({
  slug: z.string(),
  published: z.boolean(),
  categories: z.string().array(),
  tags: z.string().array(),
  __post: z.boolean().default(true),  // 既然 page 都改了那就順便改 post 的
})

@YuJianghao
Copy link
Contributor

在 server 端 patch 下 __page__post 是个好主意。

@YuJianghao
Copy link
Contributor

YuJianghao commented Sep 27, 2023

@konnokai#41 用 Server patch 修复了一下。如果可以最好了,如果不行就得采用 Client 修复了。

我用你的配置尝试下没有发现什么问题:

  • list pages
  • list posts
  • get page
  • get post

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request PR welcome
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants