首页 >后端开发 >Golang >如何在 GoLang 中重定向前端路由以避免 404 错误?

如何在 GoLang 中重定向前端路由以避免 404 错误?

Patricia Arquette
Patricia Arquette原创
2024-12-20 18:17:10852浏览

How to Redirect Frontend Routes in GoLang to Avoid 404 Errors?

将 GoLang 重定向到前端路由

问题描述

直接在浏览器中访问“/my_frontend_path”等路径时,GoLang 会返回 404 错误将路由委托给前端 React router.

问题分析

首要问题是在React router初始化之前访问此类路径时,服务器处理请求并返回错误。

单-服务器解决方案

可以实施简单的服务器端“包罗万象”方法,将所有不受支持的路径重定向到前端路由器。如果请求的文件不存在,此方法的工作原理是返回index.html页面,从而允许React路由器处理路由。

代码实现

const FSPATH = "./build/"

func main() {
    fs := http.FileServer(http.Dir(FSPATH))

    http.HandleFunc("/my_api", func(w http.ResponseWriter, _ *http.Request) {
        w.Write([]byte("API CALL"))
    })

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        // If requested file exists, return it; otherwise, return index.html
        if r.URL.Path != "/" {
            fullPath := FSPATH + strings.TrimPrefix(path.Clean(r.URL.Path), "/")
            _, err := os.Stat(fullPath)
            if err != nil {
                if !os.IsNotExist(err) {
                    panic(err)
                }

                // Requested file does not exist, return index.html
                r.URL.Path = "/"
            }
        }
        fs.ServeHTTP(w, r)
    })

    http.ListenAndServe(":8090", nil)
}

在此实现中:

  • 检查请求的文件是否存在。
  • 如果不存在(例如“/my_frontend_path”),请求将被重定向到index.html。
  • index.html 中的 React 路由器会处理“/my_frontend_path”路由。

注意

此方法会为不存在的文件返回index.html,这可能会导致“favicon.ico”等文件出现问题。在这种情况下,可以添加额外的检查以将重定向限制为仅特定扩展名。

以上是如何在 GoLang 中重定向前端路由以避免 404 错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn