gethexon / hexon

Let's hexo online.
https://hexon-demo.yujianghao.cn/#/
GNU General Public License v3.0
106 stars 22 forks source link

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

Closed konnokai closed 2 months ago

konnokai commented 1 year ago

錯誤說明

使用 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 該專案修改,也會追查此問題的導致的原因跟協助處理

使用版本

konnokai commented 1 year ago

目前解決方法

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 commented 1 year ago

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

YuJianghao commented 9 months ago

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

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