4 回答

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

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

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊
將此留在這里作為替代方案,以防萬一有人想要一個(gè)完整的示例。使用“/*”將捕獲任何以“/”開頭的路由或您想要的任何尚未定義的前綴。
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貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
在深入了解 Echo 之后,我也設(shè)法找到了另一種解決方案。Echo 有一個(gè)處理所有未知路由的 NotFoundHandler,所以我所做的只是讓它在每次請(qǐng)求未定義的路由時(shí)返回“index.html”。這是我的代碼:
echo.NotFoundHandler = func(c echo.Context)
return c.File("dist/index.html")
}
e := echo.New()
e.Static("/", "dist")
e.Start(":3000")
我不確定這是否是一個(gè)好方法,但對(duì)于像我這樣有同樣問題的人來說,這是另一種選擇
- 4 回答
- 0 關(guān)注
- 191 瀏覽
添加回答
舉報(bào)