返回

在 Go 中解决 http.handle 引发的 404 错误的终极指南

javascript

使用 Go 解决 HTTP 路由 404 错误

问题

在使用 Go 作为后端和 React 作为前端的 Web 应用程序中,我们可能遇到这样一个问题:当试图访问非 / 路由(例如 /example)时,http.handle 会引发 404 错误,显示“页面未找到”。

解决方法

1. 检查 React 路由器配置

确保 React 路由器已正确配置,并且包含了要处理的非 / 路由(例如 /example)。

2. 使用 Gorilla/mux 路由

Gorilla/mux 是一个流行的 Go 路由器,可以提供更灵活的路由处理。我们可以使用它来处理非 / 路由。

3. 注册文件服务器

需要为要服务的每个非 / 路由注册文件服务器。

4. 启用重定向

在 React 路由器中,我们可以启用重定向,以确保所有请求都重定向到 / 路由,那里可以由 Go 应用程序处理。

示例代码

以下示例代码展示了如何使用 Go 的 Gorilla/mux 路由器和 React 路由器来处理非 / 路由:

// Go 代码
package main

import (
    "github.com/gorilla/mux"
    "net/http"
    "log"
)

const public = "../frontend/public/";

func main() {
    r := mux.NewRouter()
    r.Handle("/", http.FileServer(http.Dir(public)))
    r.Handle("/example", http.StripPrefix("/example", http.FileServer(http.Dir(public))))

    log.Println("Listening on http://localhost:8080")
    log.Fatal(http.ListenAndServe(":8080", r))
}

// React 代码
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router } from 'react-router-dom';

ReactDOM.render(
  <Router basename={process.env.PUBLIC_URL}>
    {/* ... */}
  </Router>,
  document.getElementById('root')
);

结论

通过遵循上述步骤,我们可以解决 Go 中 http.handle 在调用非 / 路由时引发 404 错误的问题。使用 Gorilla/mux 路由器、注册文件服务器和启用重定向等方法,我们可以确保应用程序正确处理所有请求。

常见问题解答

1. 为什么我无法访问非 / 路由?

确保 React 路由器已正确配置,并且在 Go 应用程序中已注册了非 / 路由。

2. 如何使用 Gorilla/mux 路由?

导入 github.com/gorilla/mux,创建路由器,然后使用 r.Handle 方法注册路由。

3. 如何注册文件服务器?

使用 http.StripPrefix 方法,将路由前缀从请求中剥离,然后将文件服务器注册为处理程序。

4. 如何启用重定向?

在 React 路由器中,将 basename 属性设置为要重定向到的路径(例如,/)。

5. 为什么使用 Go 路由器?

Go 路由器提供了路由处理的强大性和灵活性,使我们能够更轻松地管理非 / 路由。