단일 페이지 애플리케이션용 Go Static 파일 서버에서 파일을 찾을 수 없음 예외를 처리하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-10-28 02:32:02
원래의
789명이 탐색했습니다.

How to Handle File Not Found Exceptions in a Go Static File Server for Single-Page Applications?

Go 정적 파일 서버에서 파일을 찾을 수 없음 예외 처리

Go 애플리케이션에서는 단일 페이지 웹 애플리케이션을 활용하고 정적을 사용하여 해당 자산을 제공합니다. 파일 서버. 서버는 루트 디렉터리의 기존 자산을 제공하는 데 적합하지만 요청한 파일이 없으면 404 찾을 수 없음 오류가 발생합니다.

귀하의 목표는 모든 자산에 대해 index.html을 제공하도록 서버의 동작을 수정하는 것입니다. 인식할 수 없는 URL입니다. 단일 페이지 애플리케이션이 제공된 HTML 및 JavaScript를 기반으로 렌더링을 처리하므로 이는 매우 중요합니다.

찾을 수 없는 파일 처리 사용자 정의

http.FileServer()에서 제공하는 기본 핸들러에는 사용자 정의 옵션이 없습니다. 404 찾을 수 없음 응답 처리를 포함합니다. 이 제한 사항을 해결하기 위해 핸들러를 래핑하고 래퍼 내에 논리를 구현합니다.

사용자 정의 HTTP 응답 작성기 만들기

원본을 래핑하는 사용자 정의 http.ResponseWriter를 만듭니다. 응답 작가. 이 사용자 정의 응답 작성기는 다음 작업을 수행합니다.

  1. 응답 상태를 검사하고 특히 404 상태 코드를 찾습니다.
  2. 404 상태 코드가 감지되면 클라이언트에 응답을 보내는 대신 , 302 Found 리디렉션 응답을 /index.html로 보냅니다.

다음은 이러한 사용자 정의 응답 작성기의 예입니다.

<code class="go">type NotFoundRedirectRespWr struct {
    http.ResponseWriter // Embed the base HTTP response writer
    status              int
}

func (w *NotFoundRedirectRespWr) WriteHeader(status int) {
    w.status = status // Store the status code
    if status != http.StatusNotFound {
        w.ResponseWriter.WriteHeader(status) // Proceed normally for non-404 statuses
    }
}

func (w *NotFoundRedirectRespWr) Write(p []byte) (int, error) {
    if w.status != http.StatusNotFound {
        return w.ResponseWriter.Write(p) // Proceed normally for non-404 statuses
    }
    return len(p), nil // Pretend that the data was successfully written, but discard it
}</code>
로그인 후 복사

기본 핸들러 래핑

다음으로 http.FileServer()에서 반환된 핸들러를 래핑합니다. 래퍼 핸들러는 다음을 수행합니다.

  1. 기본 핸들러를 호출합니다.
  2. 기본 핸들러가 사용자 정의 응답 작성기에 404 상태 코드를 설정하는 경우 이 래퍼는 응답을 가로챕니다.
  3. 404 응답을 보내는 대신 요청을 302 Found 상태의 /index.html로 리디렉션합니다.

다음은 래퍼 핸들러의 예입니다.

<code class="go">func wrapHandler(h http.Handler) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        nfrw := &NotFoundRedirectRespWr{ResponseWriter: w}
        h.ServeHTTP(nfrw, r) // Call the default handler with our custom response writer
        if nfrw.status == 404 {
            log.Printf("Redirecting %s to index.html.", r.RequestURI)
            http.Redirect(w, r, "/index.html", http.StatusFound)
        }
    }
}</code>
로그인 후 복사

모두 함께 사용하기

이제 main() 함수에서 래퍼 핸들러를 활용하여 정적 파일 서버의 동작을 수정합니다.

<code class="go">func main() {
    fs := wrapHandler(http.FileServer(http.Dir("."))) // Wrap the handler
    http.HandleFunc("/", fs)
    panic(http.ListenAndServe(":8080", nil)) // Start serving files with the custom handler
}</code>
로그인 후 복사

이 접근 방식을 사용하면 모든 존재하지 않는 파일에 해당하는 URL에 대한 요청은 index.html로의 리디렉션을 트리거합니다. 단일 페이지 애플리케이션은 의도한 대로 작동하여 제공된 HTML 및 JavaScript를 기반으로 적절한 콘텐츠를 렌더링합니다.

위 내용은 단일 페이지 애플리케이션용 Go Static 파일 서버에서 파일을 찾을 수 없음 예외를 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!