4 回答

TA貢獻1793條經驗 獲得超6個贊
這個問題與 Echo 沒有嚴格的關系。Angular 進行路由的方式是它不從服務器請求頁面。它更改了 URL 而沒有實際從服務器請求另一個頁面。
因此,當您轉到“/home”,然后刷新時,您的瀏覽器將嘗試訪問服務器并向其請求“/home”(與第一次相反,瀏覽器請求映射到“dist/”的“/” index.html”)。在 Echo 路由中找不到或未定義“/home”。因此,您會收到一條“未找到”消息。
我建議您執行以下有關路由的操作
e.Static("/dist", "dist")
e.File("/*", "dist/index.html")
e.Start(":3000")
并在index.html請求資源的 URL 之前添加“/dist”。

TA貢獻1803條經驗 獲得超6個贊
echo中的static middleware也有一個HTML5選項:eg
e.Use(middleware.StaticWithConfig(middleware.StaticConfig{
Root: "dist",
Index: "index.html",
Browse: true,
HTML5: true,
}))
這似乎處理 SPA 網頁。

TA貢獻1909條經驗 獲得超7個贊
將此留在這里作為替代方案,以防萬一有人想要一個完整的示例。使用“/*”將捕獲任何以“/”開頭的路由或您想要的任何尚未定義的前綴。
package main
import (
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
const (
HTTP_PORT = ":1234"
)
func main() {
e := echo.New()
// Logger Middleware
e.Use(middleware.Logger())
// Setup routes
SetupRoutes(e)
e.Logger.Fatal(e.Start(HTTP_PORT))
}
func SetupRoutes(e *echo.Echo) {
// Catpure route /
e.GET("/", getWebApp)
// Catpure route /test
e.GET("/test", getTest)
// Catpure all routes starting with / that haven't been defined
e.GET("/*", getWebApp)
// Use e.Any() for all request methods GET, PUT, POST, PATCH and DELETE
e.Any("/*", getWebApp)
}
func getWebApp(ctx echo.Context) error {
return ctx.File("../website_src/index.html")
}
func getTest(ctx echo.Context) error {
return ctx.String(http.StatusOK, "Hello")
}

TA貢獻1859條經驗 獲得超6個贊
在深入了解 Echo 之后,我也設法找到了另一種解決方案。Echo 有一個處理所有未知路由的 NotFoundHandler,所以我所做的只是讓它在每次請求未定義的路由時返回“index.html”。這是我的代碼:
echo.NotFoundHandler = func(c echo.Context)
return c.File("dist/index.html")
}
e := echo.New()
e.Static("/", "dist")
e.Start(":3000")
我不確定這是否是一個好方法,但對于像我這樣有同樣問題的人來說,這是另一種選擇
- 4 回答
- 0 關注
- 194 瀏覽
添加回答
舉報