修复 404 时空指针的问题

This commit is contained in:
dragon
2025-04-16 16:35:10 +08:00
parent 1302eff88f
commit 3b90e2fedf

View File

@@ -109,11 +109,13 @@ func (s *Server) Serve(writer http.ResponseWriter, request *http.Request) error
if err != nil { if err != nil {
if errors.Is(err, os.ErrNotExist) { if errors.Is(err, os.ErrNotExist) {
if meta.HistoryRouteMode { if meta.HistoryRouteMode {
// 回退 abc => index.html
result, err = s.reader.Open(meta.Owner, meta.Repo, meta.CommitID, "index.html") result, err = s.reader.Open(meta.Owner, meta.Repo, meta.CommitID, "index.html")
if err == nil { if err == nil {
meta.Path = "index.html" meta.Path = "index.html"
} }
} else { } else {
// 回退 abc => abc/ => abc/index.html
result, err = s.reader.Open(meta.Owner, meta.Repo, meta.CommitID, meta.Path+"/index.html") result, err = s.reader.Open(meta.Owner, meta.Repo, meta.CommitID, meta.Path+"/index.html")
if err == nil { if err == nil {
meta.Path = strings.Trim(meta.Path+"/index.html", "/") meta.Path = strings.Trim(meta.Path+"/index.html", "/")
@@ -123,25 +125,30 @@ func (s *Server) Serve(writer http.ResponseWriter, request *http.Request) error
return err return err
} }
} }
if err != nil && meta.CustomNotFound && errors.Is(err, os.ErrNotExist) { // 处理请求错误
// 存在 404 页面的情况 if err != nil {
result, err = s.reader.Open(meta.Owner, meta.Repo, meta.CommitID, "404.html") if meta.CustomNotFound && errors.Is(err, os.ErrNotExist) {
if err != nil { // 存在 404 页面的情况
return err result, err = s.reader.Open(meta.Owner, meta.Repo, meta.CommitID, "404.html")
} if err != nil {
writer.Header().Set("Content-Type", mime.TypeByExtension(".html"))
writer.WriteHeader(http.StatusNotFound)
if render := meta.TryRender(meta.Path, "/404.html"); render != nil {
defer result.Close()
if err = render.Render(writer, request, result); err != nil {
return err return err
} }
writer.Header().Set("Content-Type", mime.TypeByExtension(".html"))
writer.WriteHeader(http.StatusNotFound)
if render := meta.TryRender(meta.Path, "/404.html"); render != nil {
defer result.Close()
if err = render.Render(writer, request, result); err != nil {
return err
}
return nil
} else {
_, _ = io.Copy(writer, result)
_ = result.Close()
}
return nil return nil
} else { } else {
_, _ = io.Copy(writer, result) return err
_ = result.Close()
} }
return nil
} }
fileName := filepath.Base(meta.Path) fileName := filepath.Base(meta.Path)
render := meta.TryRender(meta.Path) render := meta.TryRender(meta.Path)