我想通过react router dom和echo来为React应用程序提供服务

问题描述 投票:0回答:2

我想在 Go 中使用带 echo 的 React router dom 来为 React App 提供服务。但我在路由方面遇到了问题,因为如果我直接转到该路线,则会出现“未找到”错误

package main

import (
    "fmt"
    checkerror "server/checkError"
    connectdb "server/connectDB"
    "server/handler"

    "github.com/gofor-little/env"
    echo "github.com/labstack/echo/v4"
    "github.com/labstack/echo/v4/middleware"
    _ "github.com/lib/pq"
)

func main() {
    err := env.Load(".env")
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    userDB := connectdb.UserDB{Name: "Hi", DBP: nil}
    err = userDB.ConnectDB()
    fmt.Println(userDB.DBP)
    checkerror.Checkerror(err)
    e := echo.New()
    e.Static("/","build")
    e.Use(middleware.Logger())
    handler.Apihandler(e, userDB.DBP)
    e.File("/","index.html")
    
    e.Logger.Fatal(e.Start(":1323"))
    
    defer func() {
        fmt.Println("DB disconnected")
        userDB.CloseDB()
    }()
}

这是为应用程序提供服务的代码 请帮忙

我想访问react的路由

reactjs go react-router-dom go-echo
2个回答
1
投票

不要使用 static 来提供静态文件,而是使用 StaticWith config 的中间件,这样如果找不到路由,它可以重定向到 index.HTML

e.Use(middleware.StaticWithConfig(middleware.StaticConfig{
    Skipper: nil,
    // Root directory from where the static content is served.
    Root: "build",
    // Index file for serving a directory.
    // Optional. Default value "index.html".
    Index: "index.html",
    // Enable HTML5 mode by forwarding all not-found requests to root so that
    // SPA (single-page application) can handle the routing.
    HTML5:      true,
    Browse:     false,
    IgnoreBase: false,
    Filesystem: nil,
}))

0
投票

添加到之前的答案。当

e.Static
直接提供文件时,echo mux 会拦截路由并拒绝它们。因此您会看到“未找到”错误。

© www.soinside.com 2019 - 2024. All rights reserved.